2016-04-28 2 views
0

Я использую jinja2 template engine в проекте django. Я сделал соответствующие изменения в настройках:Рендеринг форм django с движком шаблонов jinja2

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 

теперь у меня есть проблемы с рендерингом Джанго формы в шаблоне. У меня есть следующий LoginForm:

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" 
    ) 

В шаблонах я использую эту форму Джанго, как этот

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

В моем оказанной шаблоне я получаю следующую ошибку {{ no such element: django.forms.forms.DeclarativeFieldsMetaclass object['email'] }}

Почему это так и как можно Я это исправить?

EDIT

Неверный вид. Вот тот, который я не могу работать:

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

Я предполагаю, что ваш LoginForm является ModelForm.

Попробуйте инстанцировании, вы прошли непосредственно сам класс, а не экземпляр:

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() 
Смежные вопросы