为了账号安全,请及时绑定邮箱和手机立即绑定

Django:如何获取网址路径?

Django:如何获取网址路径?

料青山看我应如是 2021-11-23 16:21:20
我读过一些关于reverse函数的东西,但我不明白。我的两个网址正在调用相同的视图。在这个视图中,我需要根据 url 来决定上下文。网址.py:urlpatterns = [    path('view/', my_view),    path('edit/', my_view),]视图.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 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

最佳实践是将其分解为两个不同的视图,并将公共代码移到别处。


但是,如果您想访问路径,您可以request.path_info按照此处的说明进行调用


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


网址.py:


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

视图.py


def my_view(request, task):

    context = { 'task': task }


查看完整回答
反对 回复 2021-11-23
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

你可以试试这个


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'

        }

希望能帮助到你


查看完整回答
反对 回复 2021-11-23
  • 2 回答
  • 0 关注
  • 189 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信