django.urls.exceptions.NoReverseMatch: обратное для 'change_view' с аргументами ключевых слов - PullRequest
0 голосов
/ 16 мая 2019

я получаю сообщение об ошибке

django.urls.exceptions.NoReverseMatch: отменить 'change_view' с аргументами ключевого слова '{' view_type ':' sla ',' curr_url ':' / home /'}' не найдено.Попробован 1 шаблон (ов): ['change_view \ / (? P [^ /] +) \ / $']

Использование django 2.1.7 и python 3.6 версии

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

home.html

<li class="dropdown">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="true"><i class="fa fa-eye fa-fw"></i>View<span class="caret"></span></a>
    <ul class="dropdown-menu">
    <li {% if session.view == 'sla' %}class="disabled"{% endif %}><a href="{% url 'change_view' view_type='sla' curr_url=request.get_full_path %}"><i class="fa fa-bar-chart-o fa-fw"></i>SLA</a></li>
    <li {% if session.view == 'priority' %}class="disabled"{% endif %}><a href="{% url 'change_view' view_type='priority' curr_url=request.get_full_path %}"><i class="fa fa-trophy fa-fw"></i>Priority</a></li>
    </ul>
</li>

urls.py

urlpatterns = [
    path('change_view/<str:view_type>/', views.change_view , name='change_view'),
]

view.py

def change_view(request,view_type=None):
    request.session['view'] = view_type
    request_data = json.loads(request.body)
    curr_url = request_data['curr_url']
    return redirect(curr_url)

Я хочу, чтобы функция change_view установила request.session ['view'] для выбранного пользователем ввода и оставалась на том же URL.

1 Ответ

2 голосов
/ 16 мая 2019

Вы получаете ошибку, потому что вы пытаетесь найти URL с 2 аргументами (view_type и curr_url), но у вас есть только с 1 атрибутом (view_type).
Рассмотрите это решение - вы не будетепредоставьте curr_url ваш запрос и отправьте пользователя обратно, используя HTTP_REFERER заголовок запроса.

<li class="dropdown">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="true"><i class="fa fa-eye fa-fw"></i>View<span class="caret"></span></a>
    <ul class="dropdown-menu">
    <li {% if session.view == 'sla' %}class="disabled"{% endif %}><a href="{% url 'change_view' view_type='sla' %}"><i class="fa fa-bar-chart-o fa-fw"></i>SLA</a></li>
    <li {% if session.view == 'priority' %}class="disabled"{% endif %}><a href="{% url 'change_view' view_type='priority' %}"><i class="fa fa-trophy fa-fw"></i>Priority</a></li>
    </ul>
</li>

views.py:

def change_view(request,view_type):
    request.session['view'] = view_type
    return redirect(request.META.get('HTTP_REFERER', '/'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...