reverse()
如果您需要在代码中使用类似于url模板标签的内容,Django将提供以下功能:
reverse(viewname,urlconf = None,args = None,kwargs = None,current_app = None)[source]
viewname可以是URL模式名称或可调用视图对象。例如,给出以下url:
from news import views
url(r'^archive/$', views.archive, name='news-archive')
您可以使用以下任何一项来反转网址:
# using the named URL
reverse('news-archive')
# passing a callable object
# (This is discouraged because you can't reverse namespaced views this way.)
from news import views
reverse(views.archive)
如果URL接受参数,您可以在args中传递它们。例如:
from django.urls import reverse
def myview(request):
return HttpResponseRedirect(reverse('arch-summary', args=[1945]))
args和kwargs不能同时传递给reverse()。
如果不能匹配,则reverse()会引发NoReverseMatch异常。
reverse()函数可以反转大量各种正则表达式模式的URL,但并不是每个可能的。目前的主要限制是该模式不能包含使用垂直条(“|”)字符的替代选择。您可以非常高兴地使用这样的模式来匹配传入的URL并将其发送到视图,但是您不能反转这种模式。
current_app参数允许您向解析器提供一个提示,指示当前执行的视图所属的应用程序。根据命名空间的URL解析策略,此current_app参数用作提示将应用程序名称空间解析为特定应用程序实例的URL。
urlconf参数是包含用于反转的URL模式的URLconf模块。默认情况下,使用当前线程的根URLconf。
—-
what is reverse() in Django——StackOverFlow
in yoururls.py define this:
url(r'^foo$', some_view, name='url_name'),
in a template you can then refer to this url as:
<!-- django <= 1.4 -->
<a href="{% url url_name %}">link which calls some_view</a>
<!-- django >= 1.5 or with {% load url from future %} in your template -->
<a href="{% url 'url_name' %}">link which calls some_view</a>
this will be rendered as
<a href="/foo/">link which calls some_view</a>
now say you want to do something similar in yourviews.py - e.g. you are handling some other url (not/foo/) in some other view (not some_view) and you want to redirect the user to/foo/ (often the case on successful form submission)
you could just do
return HttpResponseRedirect('/foo/')
but what if you want to change the url in future - you’d have to update your urls.py and all references to it in your code. This violates DRY (google it).
instead you can say
from django.core.urlresolvers import reverse
return HttpResponseRedirect(reverse('url_name'))
This looks through all urls defined in your project for the url defined with the name url_nameand returns the actual url /foo/.
this means that you refer to the url only by itsnameattribute - if you want to change the url itself or the view it refers to you can do this by editing one place only - urls.py. This whole idea of editing one place only is refered to as “Don’t Repeat Yourself” and is something to strive for.
Django的reverse()函数允许在代码中类似url模板标签的方式反转URL。它接受模式名称或可调用视图对象,支持传递参数。当URL模式包含垂直条(|)字符的替代选择时,reverse()无法处理。参数app_name和namespace用于指定应用程序名称空间,module参数指定了包含URL模式的模块。通过使用reverse(),可以遵循DRY原则,避免在多个地方更改URL引用。
—— django.core.urlresolvers 之 reverse&spm=1001.2101.3001.5002&articleId=70832681&d=1&t=3&u=c38244ef8a1b42dfa325b70929b51914)
709

被折叠的 条评论
为什么被折叠?



