2016-09-12 4 views
0

Скажем, у меня есть следующий URL, который отображает на TemplateView:Джанго: доступ к переменной значение из TemplateView

url(r'^path/(?P<var1>\d+)/(?P<var2>\d+)/$', TemplateView.as_view('a_view.html')) 

Я думал, что в представлении шаблона a_view.html я мог бы получить доступ к значениям var1 и var2 как они быть схвачено и экстрагируют именованные параметры:

<!-- a_view.html --> 

<p>var1 value = {{ var1 }}</p> 
<p>var2 value = {{ var2 }}</p> 

Однако эти значения являются пустыми при посещении /path/10/89. Зачем? Как я могу получить к ним доступ? Мне нужен явный вид?

+0

Вы должны создать подкласс 'TemplateView' и реализовать' get_context_data() ', как показано на https://docs.djangoproject.com/el/1.10/re f/class-based-views/base/# templateview –

+0

Вам нужно добавить представление kwargs в контекст –

ответ

0

Я думаю, что что-то, как это должно работать.

Изменить Вы urls.py использовать именованный вид:

url(r'^path/(?P<var1>\d+)/(?P<var2>\d+)/$', YourNamedView.as_view('a_view.html')) 

Создать TemplateView и пусть захватить ваш ВАР и добавить его в контекст:

class YourNamedView(TemplateView): 
    template_name = 'a_view.html' 

    def get_context_data(self, **kwargs): 
     context = super(YourNamedView, self).get_context_data(**kwargs) 
     context.update({ 
      'var1': self.kwargs.get('var1', None), 
      'var2': self.kwargs.get('var2', None), 
     }) 
     return context 

и в шаблоне:

<h1>{{ var1 }} {{ var2 }}</h1> 
+0

Я получаю 'TypeError', который говорит:' get_context_data() принимает не менее 2 аргументов (1 данный) '(я используя Django 1.4, возможно, это имеет значение в этом случае?) – dabadaba

+0

попробуйте get_context_data (self, ** kwargs): а затем self.request.get вместо request.get –

+0

Я обновил свой ответ, попробуйте вот так: –

0

Из шаблона вы можете получить доступ к экземпляру ResolverMatch, представляющему разрешенной URL

<p>var1 value = {{ request.resolver_match.kwargs.var1 }}</p> 
<p>var2 value = {{ request.resolver_match.kwargs.var2 }}</p> 
Смежные вопросы