django-urls url参数 - Django:在模板中获取当前页面的URL,包括参数




django-templates (6)

有没有办法在Django模板中获取当前页面URL及其所有参数?

例如,一个可以打印完整URL的模板标签,例如/foo/bar?param=1&baz=2


Answers

Django有很多内置的东西,但如果你不明确你想要使用什么,它将不会被使用。

因此,在MTV模式(模型,模板,视图)中,视图接收请求并使用模板渲染生成响应,向其传递字典或此视图的所有局部变量(使用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”中,您只需执行以下操作即可显示我们刚创建并通过locals()传递的currentUrl变量:

应用程序/模板/ page.html中:

{{ currentUrl }}

除了sdolan的回答:

如果您正在使用I18N并希望将next值传递给/i18n/setlang/以更改当前页面的语言,那么您将需要从完整路径中删除当前语言代码。 就像是:

full_path = request.get_full_path()
current_path = full_path[full_path.index('/', 1):]

这假设每个路径都有格式/LANG_CODE/any/other/stuff/with/?param='yay' ,只需启动LANG_CODE无论它是什么(例如, /en/将导致/ )。


在上下文处理器中使用Django的构建来获取模板上下文中的请求。 在设置中,将request处理器添加到TEMPLATE_CONTEXT_PROCESSORS

TEMPLATE_CONTEXT_PROCESSORS = (

    # Put your context processors here

    'django.core.context_processors.request',
)

在模板中使用:

{{ request.get_full_path }}

这样您就不需要自己编写任何新代码了。


您可以查看您的网址是否与其他网址不同。

{% if 'foo/bar/' in 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}}

根据诺亚的回答,这里有一个版本可以不受选择的影响:

#annoyances/templatetags/data_verbose.py
from django import template

register = template.Library()

@register.filter
def data_verbose(boundField):
    """
    Returns field's data or it's verbose version 
    for a field with choices defined.

    Usage::

        {% load data_verbose %}
        {{form.some_field|data_verbose}}
    """
    data = boundField.data
    field = boundField.field
    return hasattr(field, 'choices') and dict(field.choices).get(data,'') or data

我不确定使用过滤器可以达到这个目的。 如果有人有更好的解决方案,我会很高兴看到它:)谢谢诺亚!





django django-urls django-templates