【问题标题】:Django: matching URL patterns to display data results in a 404Django:匹配 URL 模式以在 404 中显示数据结果
【发布时间】:2019-05-05 23:30:41
【问题描述】:

我正在尝试使用 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.

【问题讨论】:

  • 您是否已将配置文件网址添加到您的核心应用网址中?
  • @abidibo 是的。所有其他 url 模式都工作得很好。我认为问题可能在视图中的某个地方。
  • 好吧,这种错误不应该从视图内部触发
  • @abidibo 嗯...我什至尝试将 man_dash// 替换为 man_dash/manufacturers/ 以查看它是否有效但没有运气。
  • 你最好也发布你的核心应用 urls.py 和堆栈跟踪

标签: python django python-3.x django-views django-urls


【解决方案1】:
url(r'^man_dash/<str:member_type>/', views.man_org_list, name='man_org_list')

您在这里混淆了新旧 URL 语法。 &lt;str:member_type&gt; 属于path(),但r'^...' 是属于url() 的正则表达式。

尝试将其更改为:

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

【讨论】:

  • 这给了我与其他方式相同的结果。
  • 你没有显示完整的错误信息,所以我没有任何其他建议。
猜你喜欢
  • 2018-12-02
  • 2011-06-07
  • 2012-06-18
  • 2018-11-17
  • 2011-11-03
  • 1970-01-01
  • 2010-10-02
  • 2021-08-24
  • 2018-03-20
相关资源
最近更新 更多