如何在模板中获取当前页面的URL,包括参数?
有没有办法在 Django 模板中获取当前页面 URL 及其所有参数?
例如,一个模板标签将打印完整的 URL,如 /foo/bar?param=1&baz=2
Is there a way to get the current page URL and all its parameters in a Django template?
For example, a templatetag that would print a full URL like /foo/bar?param=1&baz=2
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
编写一个自定义上下文处理器。例如,
在您的
TEMPLATE_CONTEXT_PROCESSORS
设置变量中添加该函数的路径,并在模板中使用它,如下所示:如果您想在每个请求中拥有完整的
request
对象,您可以可以使用内置的django.core。 context_processors.request
上下文处理器,然后在模板中使用{{ request.get_full_path }}
。请参阅:
Write a custom context processor. e.g.
add a path to that function in your
TEMPLATE_CONTEXT_PROCESSORS
settings variable, and use it in your template like so:If you want to have the full
request
object in every request, you can use the built-indjango.core.context_processors.request
context processor, and then use{{ request.get_full_path }}
in your template.See:
使用 Django 的上下文处理器构建来获取模板上下文中的请求。在设置中将
request
处理器添加到TEMPLATE_CONTEXT_PROCESSORS
并在模板使用中:
这样您不需要自己编写任何新代码。
Use Django's build in context processor to get the request in template context. In settings add
request
processor toTEMPLATE_CONTEXT_PROCESSORS
And in template use:
This way you do not need to write any new code by yourself.
在文件 context_processors.py (或类似文件)中:
在 settings.py 中:
在 template.html 中:
In a file context_processors.py (or the like):
In settings.py:
In your template.html:
如果我们访问以下 URL:
http://127.0.0.1:8000/home/?q=test
那么
If we are acessing the following URL:
http://127.0.0.1:8000/home/?q=test
then
Django 有很多内置的东西,但是如果你不明确你想使用什么,它就不会被使用。
因此,在 MTV 模式(模型、模板、视图)中,视图接收请求并使用模板渲染来生成响应,向其传递该视图的字典或所有局部变量(使用 locals() 函数)。知道了这一点,我们可以插入来自响应的当前 url,如下所示:
views.py:
然后,在模板“app/page.html”中,您只需执行以下操作即可显示我们刚刚创建的 currentUrl 变量并通过 locals() 传递:
app/template/page.html:
Django has a lot of built-in stuff, but if you don't explicit what do you want to use, it won't be used.
So, in MTV schema (Model, Template, View) the view receives a request and uses a template render to generate a response, passing on it a dictionary or all local variables (using the locals() function) of this view. Knowing this, we can insert the current url that came from the response, like this:
views.py:
Then, in the template 'app/page.html' you just have to do the following to display the currentUrl variable that we just created and passed through via locals():
app/template/page.html:
除了 sdolan 的答案:
如果您使用的是 I18N 并希望将
next
值传递给/i18n/setlang/
来改变当前页面的语言,那么就需要剥离掉来自完整路径的当前语言代码。类似于:这假设每个路径都具有格式
/LANG_CODE/any/other/stuff/with/?param='yay'
并简单地启动LANG_CODE
无论它是什么(例如,/en/
将生成/
)。In addtition to sdolan's answer:
if you are using I18N and would like to pass
next
value to/i18n/setlang/
to change the language of the current page, then you will need to strip off current language code from the full path either. Something like:This assumes that every path has format
/LANG_CODE/any/other/stuff/with/?param='yay'
and simply kicks offLANG_CODE
whatever it is (e.g.,/en/
will result into/
).您可以查看您的网址是否与其他网址不同。
You can see if your url differs from the others.