Django:如何获取网址路径?

时间:2019-03-01 13:36:16

标签: python django url path reverse

我已经读过一些关于reverse函数的信息,但我听不懂。

我的两个网址调用了相同的视图。 在这种情况下,我需要根据url确定上下文。

urls.py:

urlpatterns = [
    path('view/', my_view),
    path('edit/', my_view),
]

views.py:

def my_view(request):
    #some code
    if(my_url_path == 'view/'):  #just taking a look
        context = {
            'task': 'view'
        }
    elif(my_url_path == 'edit/'):  #can edit
        context = {
            'task': 'edit'
        }

对于这些路径,我不使用两个不同的视图,因为其代码非常广泛,并且我可以保存许多重复的行(DRY)。它们的功能非常相似,我可以根据视图发送的上下文来调整模板中的这些细微差别。

如何处理视图中显示的内容?谢谢!

2 个答案:

答案 0 :(得分:3)

最佳做法是将其分为两个不同的视图,然后将通用代码移到其他位置。

但是,如果您要访问路径,可以按照记录的here调用request.path_info

或者,您可以在url上使用捕获组来进一步简化,前提是url模式对于您urls.py中的其他用户而言是唯一的。遵循以下方式

urls.py:

path('<task>/', my_view, name='my_view'),

views.py

def my_view(request, task):
    context = { 'task': task }

答案 1 :(得分:1)

您可以尝试

urlpatterns = [
    path('view/', my_view, 'first_url'),
    path('edit/', my_view, 'second_url'),
]

可见

from django.urls import resolve


def my_view(request):
   current_url = resolve(request.path_info).url_name

   if(current_url == 'first_url'):  #just taking a look
        context = {
            'task': 'view'
        }
   elif(current_url == 'second_url'):  #can edit
        context = {
            'task': 'edit'
        }

希望有帮助