Django:在模板中获取当前页面的URL,包括参数
有没有办法在Django模板中获取当前页面的URL及其所有参数?
例如,一个模板标签可以打印完整的URL,如/foo/bar?param=1&baz=2
编写自定义的上下文处理器 例如
def get_current_path(request): return { 'current_path': request.get_full_path() }
在TEMPLATE_CONTEXT_PROCESSORS
设置variables中为该函数添加一个path,然后在模板中使用它,如下所示:
{{ current_path }}
如果您希望在每个请求中都有完整的request
对象,则可以使用内置的django.core.context_processors.request
上下文处理器,然后在模板中使用{{ request.get_full_path }}
。
看到:
- 自定义上下文处理器
- HTTPRequest的get_full_path()方法。
在上下文处理器中使用Django的构build来获取模板上下文中的请求。 在设置中添加request
处理器到TEMPLATE_CONTEXT_PROCESSORS
TEMPLATE_CONTEXT_PROCESSORS = ( # Put your context processors here 'django.core.context_processors.request', )
并在模板使用:
{{ request.get_full_path }}
这样你就不需要自己编写任何新的代码。
在一个文件context_processors.py(或类似的):
def myurl( request ): return { 'myurlx': request.get_full_path() }
在settings.py中:
TEMPLATE_CONTEXT_PROCESSORS = ( ... wherever_it_is.context_processors.myurl, ...
在你的template.html中:
myurl={{myurlx}}
Django有很多内置的东西,但是如果你不明确你想使用什么,它将不会被使用。
因此,在MTV模式(模型,模板,视图)中,视图接收到一个请求并使用一个模板渲染来生成一个响应,传递一个字典或所有局部variables(使用locals()函数)。 知道这一点,我们可以插入来自响应的当前url,如下所示:
views.py:
from django.shortcuts import render def page(request): currentUrl = request.get_full_path() return render(request, 'app/page.html', locals())
然后,在模板“app / page.html”中,您只需执行以下操作即可显示刚创build并通过locals()传递的currentUrlvariables:
应用程序/模板/ page.html中:
{{ currentUrl }}
除了sdolan的回答:
如果你正在使用I18N,并希望将next
值传递给/i18n/setlang/
来改变当前页面的语言,那么你将需要从完整的path中/i18n/setlang/
当前的语言代码。 就像是:
full_path = request.get_full_path() current_path = full_path[full_path.index('/', 1):]
这假定每个path的格式都是/LANG_CODE/any/other/stuff/with/?param='yay'
,无论它是什么(例如, /en/
将导致/
),都会将LANG_CODE
closures。
你可以看到,如果你的url与其他人不同。
{% if 'foo/bar/' in request.get_full_path %}