我已经读过一些关于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)。它们的功能非常相似,我可以根据视图发送的上下文来调整模板中的这些细微差别。
如何处理视图中显示的内容?谢谢!
答案 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'
}
希望有帮助