Джанго: как получить URL-путь? - PullRequest
0 голосов
/ 01 марта 2019

Я прочитал кое-что о функции reverse, но не понял.

Два из моих URL-адресов вызывают одно и то же представление.В этом представлении мне нужно определить контекст на основе 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 голосов
/ 01 марта 2019

Лучше всего разбить его на два разных представления и переместить общий код в другое место.

Но если вы хотите получить доступ к пути, вы можете просто вызвать 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 }
0 голосов
/ 01 марта 2019

вы можете попробовать это

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'
        }

надеюсь, что это поможет

...