時々djangoコードを読むと、いくつかのテンプレートに「将来からURLをロードする」と表示されます。これが何なのかよくわかりませんが、URL と関係があることはわかっています。この読み込み URL from future はいつ、どのように使用されることになっていますか?
2 に答える
これは、1.3 で制定されたタグの変更によるものです。url
url
とへの変更ssi
ほとんどのテンプレート タグでは、引数として定数または変数を渡すことができます。たとえば、次のようになります。
{% extends "base.html" %}
基本テンプレートを定数として指定できますが
templ
、値を含むコンテキスト変数がある場合base.html
:{% extends templ %}
も合法です。
しかし、歴史のアクシデントにより、
url
両者ssi
は異なる。これらのタグは、引用符のない 2 番目の構文を使用しますが、引数を定数として解釈します。url
つまり、コンテキスト変数をandssi
タグのターゲットとして使用することはできません。Django 1.3 は、この歴史的な事故を修正するプロセスの開始を示しています。Django 1.3 は新しいテンプレート ライブラリを追加します – – これは、およびテンプレート タグ
future
の代替実装を提供します。このライブラリは、最初の引数の処理を他のすべての変数の処理と一致させる動作を実装します。したがって、以下を含む既存のテンプレート:url
ssi
future
{% url sample %}
次のものに置き換える必要があります。
{% load url from future %} {% url 'sample' %}
古い動作を実装するタグは廃止され、Django 1.5 では古い動作が新しい動作に置き換えられます。Django の将来のバージョンとの互換性を確保するには、新しい
future
ライブラリと構文を使用するように既存のテンプレートを変更する必要があります。
テンプレートに関連する次の顕著な例外のため、これを別の回答に入れます。
django.core.urlresolvers.NoReverseMatch
django テンプレート (Django バージョン >1.4) パーサー内から例外がスローされた場合は、テンプレート内での使用にすぎない可能性があります{% load url from future %}
。
この場合、単にurl-tagに渡された URL を引用します。{% url someurl %}
となるはずです{% url 'someurl' %}
。その方向性を示してくれたIgnacio VAに感謝します。