2016-08-02 4 views
0

「未使用は、式の最後にある」:ジャンゴ/神社:以下神社のテンプレートにアクセスするとき、私は奇妙なDjangoのエラーを取得しています

{% if variable is defined %} 
    value of variable: {{ variable }} 
{% else %} 
    variable is not defined 
{% endif %} 

それは非常に基本的な、オリジナルdocumentationから取られています。 variableは定義されていません。何が原因でこの問題が発生する可能性がありますか?

Environment: 


Request Method: POST 
Request URL: http://  
Django Version: 1.9.7 
Python Version: 3.4.2 
Installed Applications: 
['medisearch', 
'mediwiki', 
'crispy_forms', 
'django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles'] 
Installed Middleware: 
['django.middleware.security.SecurityMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware'] 


Template error: 
In template /home/django/mediwiki/medisearch/templates/medisearch/response.html, error at line 1 
    Unused 'is' at end of if expression. 1 : {% if variable is defined %} 
    2 :  value of variable: {{ variable }} 
    3 : {% else %} 
    4 :  variable is not defined 
    5 : {% endif %} 
    6 : 

Traceback: 

File "/home/django/local/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response 
    149.      response = self.process_exception_by_middleware(e, request) 

File "/home/django/local/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response 
    147.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "/home/django/mediwiki/medisearch/views.py" in search 
    21.    return render(request, 'medisearch/response.html', {'response': response}) 

File "/home/django/local/lib/python3.4/site-packages/django/shortcuts.py" in render 
    67.    template_name, context, request=request, using=using) 

File "/home/django/local/lib/python3.4/site-packages/django/template/loader.py" in render_to_string 
    96.    template = get_template(template_name, using=using) 

File "/home/django/local/lib/python3.4/site-packages/django/template/loader.py" in get_template 
    32.     return engine.get_template(template_name, dirs) 

File "/home/django/local/lib/python3.4/site-packages/django/template/backends/django.py" in get_template 
    40.    return Template(self.engine.get_template(template_name, dirs), self) 

File "/home/django/local/lib/python3.4/site-packages/django/template/engine.py" in get_template 
    190.   template, origin = self.find_template(template_name, dirs) 

File "/home/django/local/lib/python3.4/site-packages/django/template/engine.py" in find_template 
    157.       name, template_dirs=dirs, skip=skip, 

File "/home/django/local/lib/python3.4/site-packages/django/template/loaders/base.py" in get_template 
    46.      contents, origin, origin.template_name, self.engine, 

File "/home/django/local/lib/python3.4/site-packages/django/template/base.py" in __init__ 
    189.   self.nodelist = self.compile_nodelist() 

File "/home/django/local/lib/python3.4/site-packages/django/template/base.py" in compile_nodelist 
    231.    return parser.parse() 

File "/home/django/local/lib/python3.4/site-packages/django/template/base.py" in parse 
    516.      raise self.error(token, e) 

File "/home/django/local/lib/python3.4/site-packages/django/template/base.py" in parse 
    514.      compiled_result = compile_func(self, token) 

File "/home/django/local/lib/python3.4/site-packages/django/template/defaulttags.py" in do_if 
    1027.  condition = TemplateIfParser(parser, bits).parse() 

File "/home/django/local/lib/python3.4/site-packages/django/template/smartif.py" in parse 
    201.         self.current_token.display()) 

Exception Type: TemplateSyntaxError at /medisearch/ 
Exception Value: Unused 'is' at end of if expression. 
+2

'settings.py'の' TEMPLATES'リストを 'jinja2 BACKEND'を含むように変更しましたか? –

答えて

1

DjangoはJinja2と完全に互換性がないので、これが起こっていると思います。これは、Jinja FAQから取られました:

Jinja2のデフォルトの構文は、さまざまな点でDjangoの構文と一致します。しかし、この類似性は、Jinja2で修正されていないDjangoテンプレートを使用できるという意味ではありません。たとえば、フィルター引数は、フィルター名と引数を区切るためにコロンではなく関数呼び出し構文を使用します。さらに、Jinjaの拡張インターフェイスは、Djangoとは基本的に異なります。これは、カスタムタグがもう機能しなくなることを意味します。

許可されているため、これがあなたのために働いていない理由がわかりません。しかしながら

the Django documentation suggests using the {% if %} template tag to check for definedness(間違いワード):

{%%あれば}タグは変数を評価し、その変数が「真」である場合(すなわち、存在する、空ではなく、そしてAはありませんfalse boolean value)ブロックの内容が出力されます。

ここで重要なことは、「存在する」ことです。

これは、タグを使用することになっているため、DjangoのJinjaはdefined関数を使用していません。

if variable: 
    print(variable) 

# NameError: name 'variable' is not defined 
+0

えー、私はDjangoがデフォルトでJinjaを使用していないことを知りませんでした!もともと、私は、変数が繰り返し可能か/リストかをチェックするために、Jinjasの 'iterable'関数を使いたいと思っていました。これはDjangoのテンプレート言語で可能ですか?もしそうでなければ、Jinjaに切り替える価値があるのだろうか? – theCed7

+0

私は両方を使用しましたが、どちらか一方を特に好んではいません。一般的に、私はコミットごとに自分のコードをリファクタリングして、テンプレートにロジックがあまりないようにします。なぜなら、私はロジックとデザインの分離を大いに信じているからです。あなたが本当にDjangoを好きで、何か他のものを使って自分自身を見ないなら、なんらかの理由でそれが厳しく制限されない限り(私が期待しない限り)、Djangoのテンプレートに固執することができます。しかし、Jinjaを学ぶことの利点は、Flaskなどの他のフレームワークで使用されているため、他のものに取り組む予定があるかどうかを知ることができます。 – ericmarkmartin

+0

まったく違って、彼らはあまりにも違うIMOではない – ericmarkmartin

0

DjangoはDjangoテンプレート言語としてテンプレートを処理しているためエラーがある:

これは通常のPythonでの動作ではないこと、しかし、注意を行ってください。あなたのjinja2テンプレートは、あなたのアプリのjinja2ディレクトリに属しています。 /home/django/mediwiki/medisearch/jinja2/medisearch/response.html

関連する問題