在不使用上下文处理器的情况下访问 django 1.7 模板中的 URL 参数
Posted
技术标签:
【中文标题】在不使用上下文处理器的情况下访问 django 1.7 模板中的 URL 参数【英文标题】:Access URL parameters in django 1.7 template without using context processors 【发布时间】:2015-01-28 19:11:57 【问题描述】:http://www.example.com/soe/?param1=val1
这是当前 url,我想访问 django 模板中的变量 param1。 (Django 1.7)
我知道已经有很多线程可以解决这个问题,但它们都在使用 ContextProcessor.(或 render_to_response)
我只是在使用return render(request, template, )
,不想使用 ContextProcessors。
解决这个问题的一种方法是我在渲染时传递param1的值,我的意思是
return render(request, template, 'param1': request.GET.get('param1'))
但我只是想知道是否可以在模板本身中访问此变量?因为可能有 10 个参数。
【问题讨论】:
您对上下文处理器有什么看法?它们是这个问题的完美解决方案。 【参考方案1】:您可以尝试在 django 模板中使用自定义标签。
【讨论】:
能否请您详细说明。如果我可以进入模板本身,我想再次避免创建模板标签。 看看这是否有帮助 request.GET.param1 来吧!我尝试的第一件事就是这个。甚至 GET.param1 因为我们可以在不使用 request.user 的情况下访问 user。不工作 gautam 的建议确实有效,只要您在 django 设置中启用了django.template.context_processors.request
。【参考方案2】:
以下将实际工作......
request.GET.param1
...只要您在设置文件中启用了默认的django.template.context_processors.request
。
DJANGO_CONTEXT_PROCESSORS = (
# ...any other context processors you want to run
'django.core.context_processors.request',
)
它所做的只是将请求对象放在您的模板上下文中,然后您可以使用它来访问 url 参数。这正是您正在寻找的功能。见here。
您唯一的其他选择是将参数显式传递给模板,正如您在问题中描述的那样。
【讨论】:
以上是关于在不使用上下文处理器的情况下访问 django 1.7 模板中的 URL 参数的主要内容,如果未能解决你的问题,请参考以下文章
如何在不知道子类名称的情况下访问 django 中对象的子类?
如何在不定义内容类型或模型的情况下使用 Django 权限?