我要建立一个网址动态地、根据当前的网址。使用 {% url %} 标记是最简单的方法来做到这一点,但我需要目前的url名称的产生新的动态。

我如何可以获得的url名称的个配置里,导致目前来看?

编辑:我知道我可以手动手工艺品的使用url get_absolute_url 但我宁愿避免它因为它的一部分演讲,我想证明只有一个办法建立网址。

学生们知道如何使用 {% url %}.他们知道面临的一个问题时,他们必须产生一个更完整的网址根据当前的一个。最简单的方法是使用 {% url %} 再次,有些变化。因为我们有命名为网址, 我们需要知道如何获得姓名的网址,所谓的前景。

编辑2:另一种情况是显示器部件的基本模板différently根据基本的模板。还有其他的方式来做到这一点(利用CSS并{%框%}但有时它只是漂亮,以便能够删除标记的菜单条目的base.html 如果视图匹配的链接。

有帮助吗?

解决方案

我不知道怎么长的这一要素已经部分Django但作为 下面的文章 显示出,它能够实现如下的图:

   from django.core.urlresolvers import resolve
   current_url = resolve(request.path_info).url_name

如果你需要,在每一个模板,编写一个模板要求可能是适当的。

编辑:采用新的DJANGO更新

下面的当前Django更新:

Django1.10 (链接)

进口从 django.core.urlresolvers 模块被弃用 赞成其新的位置, django.urls

Django2.0 (链接)

django.core.urlresolvers 模块中删除有利于其新的 位置, django.urls.

因此,正确的方式做到的是这样的:

from django.urls import resolve
current_url = resolve(request.path_info).url_name

其他提示

1.5的Django的如,这可以从请求对象访问

    current_url = request.resolver_match.url_name

https://docs.djangoproject.com/en/开发/ REF /请求响应/#django.http.HttpRequest.resolver_match

对于那些谁名称空间中的URL模式,那么你可能有兴趣在请求的命名空间URL名称。在这种情况下,则Django称之为view_name代替。

request.resolver_match.view_name

# return: <namespace>:<url name>

这可以通过实现:

request.resolver_match.url_name

的Django> 1.8

问题的澄清:“在视图中,你如何让一个URLPATTERN的名称指向它,假设正好有这样一个URLPATTERN”

这可能需要陈述的理由:从视图中,我们希望得到一个链接到同一视图的干法(我们不希望有知道我们自己的URLPATTERN名)

简短的回答:这是不是真的足够简单教你的类,但它可能是一个有趣的事情让你在一两个小时做的,扔了在GitHub上

如果你真的想这样做,你就必须继承RegexURLResolver和修改的解决方法返回匹配的模式(从中可以得到图案名),而不是观点和关键字/值对。 http://code.djangoproject.com/browser/ django的/中继/ django的/核心/ urlresolvers.py#L142

您可以再创建一个装饰或者更恰当的中间件使用此子类来获取模式名称和商店中的请求值的地方,这样的观点可以使用它。

如果你真的想做到这一点,你遇到了一些麻烦跑,让我知道,我也许可以帮忙。

有关您的课,我只想让他们在视图或模板硬编码图案名称。相信这是做它的可接受的方式。

<强>更新 我越思考这个,我越会阻止试图在视图中获得URLPATTERN名。 URLPATTERN参数是相当独立的,他们指向视图的参数。如果你想指向一个特定的网址,你需要知道如何URLPATTERN的作品,不只是视图如何工作。如果你需要知道如何在URLPATTERN的作品,你不妨要知道URLPATTERN的名称。

这一点不清楚自己的问题,但是 http://docs.djangoproject.com/en/dev/topics/http/urls/ 可能将提供一个解释为什么你之后。

特别有用的是要注意如何决进程的请求:

当用户请求的网页,从Django-供电网站,这是算法的系统下,以确定它代码来执行:

  1. 决定根个配置里的模块使用。通常,这是值ROOT_URLCONF设定,但如果进入http请求的对象有一个特性被称为个配置里(组通过中间请求的处理),其价值将用于在地方ROOT_URLCONF设置。
  2. Django载荷Python模块,看起来用于可变urlpatterns.这应该是一个Python列表,在格式返回的功能强哥conf.网址。默认。模式().
  3. Django贯穿每个网址的模式,以及停止第一个符合所要求的网址。
  4. 一旦一个regex相匹配,Django进口,并呼吁给视,这是一个简单的蟒蛇的功能。视获得通过http请求作为其第一个参数以及任何值捕获regex为剩余的参数。

如果你只是后的完整的路径,可以尝试:

http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.get_full_path

我希望,帮助它表明如何使用个配置里的模块,并希望将有助于你指出正确的方向。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top