如何在django中获取视图函数的url路径

时间:2012-05-10 11:45:25

标签: python django

举个例子:

view.py

def view1( request ):
    return HttpResponse( "just a test..." )

urls.py

urlpatterns = patterns('',
    url( r'^view1$', 'app1.view.view1'),
)

我想获取view1的网址路径。我怎样才能做到这一点。 我想避免对任何URL路径进行硬编码,例如" xxx / view1"。

7 个答案:

答案 0 :(得分:25)

您需要reverse

reverse('app1.view.view1')

如果您想查找网址并重定向到该网址,请使用redirect

redirect('app1.view.view1')

如果想要更进一步而不是硬编码您的视图名称,您可以name your URL patterns并使用这些名称。

答案 1 :(得分:11)

这取决于你是否想要它,如果你想在视图中获取url(python代码)你可以使用reverse函数(documentation):

reverse('admin:app_list', kwargs={'app_label': 'auth'})

如果想在模板中使用它,那么您可以使用url标记(documentation):

{% url 'path.to.some_view' v1 v2 %}

答案 2 :(得分:3)

如果你想将view1的url放入view1中,那么最好是request.get_path()

答案 3 :(得分:3)

正如其他人所说,reverse函数和url模板标签可以(应该)用于此目的。

我建议为您的网址格式添加名称

urlpatterns = patterns('',
    url( r'^view1$', 'app1.view.view1', name='view1'),
)

并通过此名称来反转它

reverse('view1')

这将使您的代码更容易重构

答案 4 :(得分:2)

是的,当然你可以获得名为' view1'的网址视图。没有硬编码网址。

您需要做的就是 - 只需导入'反向'来自Django urlresolvers的功能。

请看下面的示例代码:

from django.core.urlresolvers import reverse

from django.http import HttpResponseRedirect

def some_redirect_fun(request):

    return HttpResponseRedirect(reverse('view-name'))

答案 5 :(得分:1)

您可以使用reverse功能。您可以分别为url-includes和url指定名称空间和名称,以使重构更容易。

答案 6 :(得分:0)

通用方法

1。生成带有所有具有相应视图功能的URL的文本文件

./manage.py show_urls --format pretty-json --settings=<path-to-settings> > urls.txt

示例 ./manage.py show_urls --format pretty-json --settings=settings2.testing > urls.txt

2。在输出文件中查找您的URL urls.txt

    {
        "url": "/v3/blockdocuments/<pk>/",
        "module": "api.views.ganeditor.BlockDocumentViewSet",
        "name": "block-documents-detail",
    },