SOAPサービスへのWeb呼び出しを介して国のリストを取得し、html selectタグにデータを入力するカスタムテンプレートタグがあります。これで、を表示する別のテンプレートタグがあります。指定された国の選択肢のリストであり、もちろん、国名を引数として使用します。したがって、html selectタグでonchangeイベントがトリガーされた後でのみ、国名を2番目のカスタムタグに渡すことができます。ユーザーが選択したjavascript変数として国名があります。この値をカスタムテンプレートタグに渡すにはどうすればよいですか?カスタムタグは次のとおりです。
from mezzanine import template
from suds.client import Client
register = template.Library()
@register.as_tag
def get_countries(*args):
url = 'http://www.sendfromchina.com/shipfee/web_service?wsdl'
client = Client(url)
countries = client.service.getCountries()
countries = map(lambda x: x._enName, countries)
return countries
@register.as_tag
def get_available_carriers(weight,country,length,width,height):
url = 'http://www.sendfromchina.com/shipfee/web_service?wsdl'
client = Client(url)
rates = client.service.getRates(weight,country,length,width,height)
rates=map(lambda x: (x._shiptypecode, x._totalfee), rates)
return rates
これが私のhtmlですselectタグ
<select id='countrylist' onchange="getOption(this)">
{% get_countries as countries %}
{% for country in countries %}
<option>{{ country }}</option>
{% endfor %}
<select>
そして最後に、これが私のJavaScriptです
<script type="text/javascript">
function getOption(sel){
var country = sel.value;
{% get_available_carriers 1 country 10 10 10 as carriers %}
console.log('{{ carriers }}')
}
</script>
country js変数をget_available_carriers
タグに渡せないようです
どんな助けでも大歓迎です!ありがとう
Javascript関数からDjangoテンプレートタグに値を渡さなかった。ただし、この場合、ajax呼び出しを使用できます。
http://www.tangowithdjango.com/book/chapters/ajax.html
https://bradmontgomery.net/blog/2008/11/24/a-simple-Django-example-with-ajax/
更新:
これを見て、何が起こっているのかを理解することができます。
javascript変数をDjangoカスタムフィルター に渡す方法
これがお役に立てば幸いです。
Djangoテンプレートは、ページの生成時にサーバー側で構築され、JavaScriptは必要に応じてクライアント側で実行されます。 したがって、DjangoおよびJavascriptはオブジェクト/データを共有できません。
あなたのページでは、現在のJavascriptを使用すると、次のようになります。
<script type="text/javascript">
function getOption(sel){
var country = sel.value;
// Empty line due to the templatetag
console.log('')
}
</script>
必要なのは、ビューでリストを生成し、すでに作成されているcarrier
オブジェクトを返すことです。運が良ければ、Javascriptで使用できるかもしれません。
ここでの最善の方法は、このリストを取得するためにAJAXリクエストを行うことです:
def get_available_carriers(request, weight, country, length, width, height):
url = 'http://www.sendfromchina.com/shipfee/web_service?wsdl'
client = Client(url)
rates = client.service.getRates(weight,country,length,width,height)
rates=map(lambda x: (x._shiptypecode, x._totalfee), rates)
return json.dumps(rates)
そしてjQueryでそれを取得します(あなたがそれを使用している場合):
$.get('{% url "get_available_carriers" 1 country 10 10 10 %}', function(data){
console.log(data);
});
私の例ではget_available_carriers
を使用して、URLパターンを定義することを忘れないでください。