2016-04-28 10 views
0

djangoプロジェクトでjinja2テンプレートエンジンを使用しています。私は設定で対応する変更を加えた:jinja2テンプレートエンジンでdjangoをレンダリングする

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.jinja2.Jinja2', 
     'DIRS': [os.path.join(PROJECT_DIR.child("templates"), ''),], 
     'OPTIONS': { 
      'environment': 'web_services.settings.jinja2.environment', 
     } 
    }, 
] 

と環境はここからロードされます。

from django.contrib.staticfiles.storage import staticfiles_storage 
from django.core.urlresolvers import reverse 

from jinja2 import Environment 


def environment(**options): 
    env = Environment(**options) 
    env.globals.update({ 
     'static': staticfiles_storage.url, 
     'url': reverse, 
    }) 
    return env 

私は今、テンプレートでDjangoのフォームのレンダリングに問題があります。私は、次のLoginForm持っている:私は次のエラーを取得する私は私のレンダリングされたテンプレートには、この

<form method="post" name="{{ url('auth:login') }}"> 
    <div class="form-1-field"> 
     {{ LoginForm.email }} 
     {{ LoginForm.password }} 
    </div> 
</form> 

のようなこのDjangoのフォームを使用したテンプレートで

class LoginForm(forms.Form): 
    email = forms.EmailField(
     widget=forms.TextInput(
      attrs={'class':'form-control', 'placeholder':'email', 
        'required':'True', 'max_length':'80'} 
     ), label='Email address' 
    ) 
    password = forms.CharField(
     widget=forms.PasswordInput(
      attrs={'class':'form-control', 'placeholder':'password', 
        'required':'True', 'max_length':'80', 'render_value':'False'} 
     ), label="Password" 
    ) 

{{ no such element: django.forms.forms.DeclarativeFieldsMetaclass object['email'] }}

なぜそれがそうであるとどのようにすることができます私はこれを解決する?

編集

間違った見方をしました。

class IndexAccounts(View): 

    def get(self, request): 
     if request.user.is_authenticated(): 
      return redirect(reverse('home:index')) 
     return render(request, 'login.jinja2', {'LoginForm': LoginForm}) 
+0

あなたはビューをしてください提供してもらえますか?そしてあなたが 'environment()'と呼ぶ場所? – vmonteco

+0

@vmonteco上記のビューを提供しました。明示的に 'environment()'を呼び出す必要がありますか?私が[docs](https://docs.djangoproject.com/es/1.9/topics/templates/#django.template.backends.jinja2.Jinja2)から理解したように、私はちょうど 'TEMPLATES'のオプションに参照を入れる必要があります設定 – AmirM

+0

私の悪い、それはあなたが正しいようです。あなたは完全なトレースバックを提供できますか? – vmonteco

答えて

2

私はあなたのLoginFormModelFormであることを前提としています。ここで私は作業をすることができないものです。

がそれをインスタンス化してみ、あなたは直接、クラス自体ではなく、インスタンスを渡さ:

class IndexAccounts(View): 

    def get(self, request): 
     if request.user.is_authenticated(): 
      return redirect(reverse('home:index')) 
     return render(request, 'login.jinja2', 
         {'LoginForm': LoginForm()}) # <- just add the() 
関連する問題