【问题标题】:Access kwargs from a URL in a Django template从 Django 模板中的 URL 访问 kwargs
【发布时间】:2017-12-19 07:27:00
【问题描述】:

我可以在 Django 模板中访问命名参数的值(来自 URL)吗?

我可以从 django 模板访问下面this_name 的值吗?

url(r'^area/(?P<this_name>[\w-]+)/$', views.AreaView.as_view(), name="area_list")

我可以获取整个 URL 路径并将其分解,但我想检查是否有直接的方法可以做到这一点,因为它已经有一个名称。

在视图的上下文数据中传递它可能是一种替代方法,但不确定我是否需要传递它,因为我猜模板已经以某种方式拥有它?但是在request API 中找不到直接方法。

【问题讨论】:

  • this_name 将作为上下文传递,然后可以在模板中使用。我不明白你为什么不能访问。或者您想以其他方式访问它。可能是一个完整的用例将澄清这个问题

标签: django django-templates django-urls


【解决方案1】:

在视图中,您可以通过self.argsself.kwargs 访问URL argskwargs

class MyView(View):
    def my_method(self):
        this_name = self.kwargs['this_name']

如果您只想访问模板中的值,则无需在视图中进行任何更改。基本的get_context_data 方法将视图作为view 添加到上下文中,因此您可以将以下内容添加到您的模板中:

{{ view.kwargs.this_name }}

【讨论】:

  • 我不得不为另一个不基于基于类的视图但不知如何在那里访问 kwargs 的模板执行此操作。非基于类的视图的方法不同吗?在文档中搜索但找不到任何有用的东西。我只试过kwargs.this_name,但这也没有返回任何东西
  • 如果您有一个视图函数def my_view(request, myvar, *args **kwargs):,那么您可以在模板上下文中包含变量,例如return render(request, 'mytemplate.html', {'myvar': myvar, 'foo': kwargs.get('foo')})
猜你喜欢
  • 2016-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 2013-10-27
  • 2019-03-10
  • 1970-01-01
相关资源
最近更新 更多