Django: сопоставление шаблонов URL для отображения данных приводит к 404 - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь использовать сопоставление с шаблоном URL для динамического отображения данных в моем шаблоне.Цель состоит в том, чтобы отобразить данные, основанные на типе организации, который у меня 3: Производители, Поставщики и Дистрибьюторы.

Итак, если URL соответствует /profiles/man_dash/**manufacturers**/, отобразить данные для всех производителей.Ниже мой код:

Просмотр

def man_org_list(request, member_type=None):
    member_type_map = {
        'manufacturers': 'Manufacturer',
        'suppliers': 'Supplier',
        'distributors': 'Distributor'
    }

    member_type = member_type_map.get(member_type, None)
    if member_type is None:
        raise Http404
    queryset = Organization.objects.filter(member__member_flag=1, member__member_type=member_type).order_by('id')
    return render(request, 'profiles/man_dash.html', {'object_list': queryset})

Ядро urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('profiles/', include('profiles.urls'))
]

urls.py

urlpatterns = [
    url(r'^$', views.org_list, name='org_list'),
    url(r'^(?P<id>\d+)/$', views.org_details, name='org_details'),
    url(r'^man_dash/<str:member_type>/', views.man_org_list, name='man_org_list')
]

Блок кода, который я хочу отобразить:

{% for org in object_list %}
      <tr>
        <th scope="row">{{ org.id }}</th>
        <td>{{ org.org_name }}</td>
        <td>{{ org.org_type }}</td>
        {% for member in org.member.all %}
        <td>{{ member.member_flag }}</td>
        {% endfor %}
        {% for c_score in org.c_score.all %}
        <td>{{ c_score.completeness_score }}%</td>
        {% endfor %}
        <td><a href="{% url 'org_details' org.id %}" target="_blank">View</a></td>
      </tr>
  {% endfor %}

По какой-то причине я получаю сообщение об ошибке:

The current path, profiles/man_dash/manufacturers/, didn't match any of these.

1 Ответ

0 голосов
/ 04 декабря 2018
url(r'^man_dash/<str:member_type>/', views.man_org_list, name='man_org_list')

Вы смешиваете старый и новый синтаксис URL здесь.<str:member_type> принадлежит path(), но r'^...' является регулярным выражением, которое принадлежит url().

Попробуйте изменить его на:

path('man_dash/<str:member_type>/', views.man_org_list, name='man_org_list')
...