python - Django:带有PK问题的DetailView URL
问题描述
我是 Django 的新手,我正在尝试构建一个教堂目录应用程序来管理教堂(羊群)中的用户(羊)。在我为名为 ChurchMembers 的模型添加 CBV - DetailView 之前,一切似乎都有效。我想使用 ChurchMember 的 pk 为成员创建一个 DetailView 以拥有个人资料。
我在调试中收到以下错误消息:
NoReverseMatch at /flock/members/
Reverse for 'view_member_detail' with keyword arguments '{'pk': ''}' not found. 1 pattern(s) tried: ['flock/members/(?P<member_pk>\\d+)/$']
这是我的views.py(仅显示有问题的DetailView):
class view_member_detail(DetailView):
model = models.ChurchMember
template_name = 'flock_app/member_profile.html'
context_object_name = 'member_detail'
pk_url_kwarg = 'member_pk'
我有一种预感,这与我的 urls.py 文件的设置方式有关。可能是不正确的正则表达式,或者可能是错误的排序。下面的urls.py:
app_name = 'flock_app'
urlpatterns = [
url(r'^$', views.home, name='home'),
url(r'^register/$', views.register, name='register'),
url(r'^login/$', views.user_login, name='user_login'),
url(r'^logout/$', views.user_logout, name='user_logout'),
url(r'^add_church/$', views.add_church, name='add_church'),
url(r'^add_member/$', views.add_member, name='add_member'),
url(r'^members/$', views.view_members_list.as_view(), name='view_members_list'),
url(r'^members/(?P<member_pk>\d+)/$', views.view_member_detail.as_view(), name='view_member_detail'),
url(r'^churches2/$', views.view_churches_list.as_view(), name='view_churches_list'),
url(r'^(?P<pk>[-\w]+)/$', views.view_churches_detail.as_view(), name='view_churches_detail'),
url(r'^update/(?P<pk>\d+)/$', views.update_church_detail.as_view(), name='update_church_detail'),
url(r'^delete/(?P<pk>[-\w]+)/$', views.delete_church.as_view(), name='delete_church'),
url(r'^home', views.home, name='home')
]
这是我从 HTML 调用 DetailView:
<div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
<a class="dropdown-item" href="{% url 'flock_app:view_member_detail' pk=mem.member_pk %}">Sheep Profile</a>
<a class="dropdown-item" href="#">Delete sheep</a>
<div/>
任何帮助,将不胜感激!
编辑 - 添加了 HTML 的源代码
{% extends 'flock_app/base.html' %}
{% load crispy_forms_tags %}
{% block body_block%}
<div class="jumbotron">
{% if members %}
<h1 class="display-3 text-center">All Sheep in Flocks <button type="button" class="btn btn-outline-secondary" onclick="location.href='{% url 'flock_app:add_member' %}'">Add Sheep</button></h1>
<table class="table table-hover">
<thead class=>
<tr>
<th scope="col"></th>
<th scope="col">Flock</th>
<th scope="col">First Name</th>
<th scope="col">Last Name</th>
<th scope="col">Email</th>
<th scope="col">Phone</th>
<th></th>
</tr>
</thead>
{% for mem in members %}
<tbody>
<tr>
<th scope="row"></th>
<td>{{ mem.Flock }}</td>
<td>{{ mem.First_Name }}</td>
<td>{{ mem.Last_Name }}</td>
<td>{{ mem.Email }}</td>
<td>{{ mem.Phone_Number }}</td>
<td>
<div class="dropdown">
<a class="btn btn-outline-secondary dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Manage</a></th>
<div/>
<div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
<a class="dropdown-item" href="{% url 'flock_app:view_member_detail' pk=mem.member_pk %}">Sheep Profile</a>
<a class="dropdown-item" href="#">Delete sheep</a>
<div/>
</td>
</tr>
{% endfor %}
<table/>
{% else %}
<h1 class="text-center">No Sheep Found</h1>
<h1 class="lead text-center">Click <a href="{% url 'flock_app:add_member' %}">here</a> to add Sheep to <em>His</em>_Flock</h2>
{% endif %}
</div>
{% endblock %}
编辑 2 - DJANGO 错误代码
NoReverseMatch at /flock/members/
Reverse for 'view_member_detail' with keyword arguments '{'pk': ''}' not found. 1 pattern(s) tried: ['flock/members/(?P<member_pk>\\d+)/$']
Request Method: GET
Request URL: http://127.0.0.1:8000/flock/members/
Django Version: 1.11.7
Exception Type: NoReverseMatch
Exception Value:
Reverse for 'view_member_detail' with keyword arguments '{'pk': ''}' not found. 1 pattern(s) tried: ['flock/members/(?P<member_pk>\\d+)/$']
Exception Location: C:\Program Files\Python35\lib\site-packages\django\urls\resolvers.py in _reverse_with_prefix, line 497
Python Executable: C:\Program Files\Python35\python.exe
Python Version: 3.5.4
Python Path:
['C:\\Users\\gabrielcastillo\\Google Drive\\git_base\\flock',
'C:\\Program Files\\Python35\\python35.zip',
'C:\\Program Files\\Python35\\DLLs',
'C:\\Program Files\\Python35\\lib',
'C:\\Program Files\\Python35',
'C:\\Program Files\\Python35\\lib\\site-packages',
'C:\\Program Files\\Python35\\lib\\site-packages\\win32',
'C:\\Program Files\\Python35\\lib\\site-packages\\win32\\lib',
'C:\\Program Files\\Python35\\lib\\site-packages\\Pythonwin']
Server time: Wed, 18 Jul 2018 02:21:37 +0000
Error during template rendering
In template C:\Users\gabrielcastillo\Google Drive\git_base\flock\templates\flock_app\base.html, error at line 0
Reverse for 'view_member_detail' with keyword arguments '{'pk': ''}' not found. 1 pattern(s) tried: ['flock/members/(?P<member_pk>\\d+)/$']
解决方案
网址更改为
url(r'^members/(?P<member_pk>\d+)/$', views.view_member_detail.as_view(), name='view_member_detail'),
至
url(r'^members/(?P<pk>\d+)/$', views.view_member_detail.as_view(), name='view_member_detail'),
推荐阅读
- html - 如何在 xslt 2.0 中执行不区分大小写的属性名称
- docker - Docker 私有注册表镜像上传
- java - 选择项目后组合框中的图像消失
- data-structures - 如何使用联合查找数据结构对字符串进行分组?
- r - 不使用 %>% 的不同值
- javascript - AngularJS单元测试时无法加载模块
- javascript - 是否可以在 React 中访问组件之外的函数?
- javascript - 将 Javsacript SDK 注入几个选定的页面
- git - 如何初始化,添加现有远程,然后在 Git 中推送新分支?
- c - 如何在一行中读取 C 中的多个字符串,每个字符串都包含空格?