我正在使用django制作网站。我正在学习如何让超级用户使用表格更改帐户信息'由youtube。但是,我有一个问题需要去编辑页面。
管理应用中的member_management.html
{% for staff in staff_list %}
<tr>
<td><a href="{% url "management:edit_staff" staff.id %}">{{ staff }}</a></td>
<td>{{ staff.birth }}</td>
<td>{{ staff.groups.all.0 }}</td>
</tr>
{% endfor %}
如果我点击{{staff}},页面网址会更改&#39; management / member_management&#39;到&#39; management / member_management / edit_staff / 1&#39; (1是员工ID)。但是页面没有进入edit_staff页面,而是重定向memeber_management页面(本页)。
我在管理应用中的urls.py
from django.conf.urls import url, include
from management import views
urlpatterns = [
url(r'^member_management/', views.member_management, name='member_management'),
url(r'^member_management/edit_staff/(?P<staff_id>\d+)', views.edit_staff, name="edit_staff"),
]
我在管理应用中的views.py
from django.conf import settings
from django.shortcuts import render, redirect
from django.contrib.auth.forms import UserChangeForm
from authentication.models import User
from staff.models import Member
def member_management(request):
staff_list = User.objects.all()
member_list = Member.objects.all()
context = {
'staff_list':staff_list,
'member_list' : member_list,
}
return render(request, 'management/member_management.html', context)
def edit_staff(request, staff_id):
staff = User.objects.get(id=staff_id)
print("sdf")
if request.method == 'POST':
form = UserChangeForm(request.POST, instance=staff)
if form.is_valid():
form.save()
return redirect('member_management')
else:
staff = User.objects.get(id=staff_id)
form = UserChangeForm(instance=staff)
context = {
'form' : form,
}
return render(request, 'management/edit_staff.html', context)
问题是什么?任何错误都不会出现在我的CMD中,也许是我想念的一些路线。 任何帮助对我都非常有帮助,谢谢!
答案 0 :(得分:1)
您可以解决此问题,只需将 $(字符串结尾符合字符)放在第一个网址的末尾即可。
urlpatterns = [
url(r'^member_management/$', views.member_management,
name='member_management'),
url(r'^member_management/edit_staff/(?P<staff_id>\d+)',
views.edit_staff, name="edit_staff"),
]
请注意,此示例中的正则表达式没有$ (字符串结尾匹配字符)但包含尾部斜杠。 每当Django遇到include()(django.conf.urls.include())时,它就会出现 切断与该点匹配的URL的任何部分并发送 包含URLconf的剩余字符串,以便进一步处理。
如果你没有把$,你可能会遇到意想不到的结果,如:
management / member_management / edit_staff / 1 / foo / bar / baz将匹配,并将调用 views.edit_staff
为避免这种情况,您应该在edit_staff网址上加上 $ 。
url(r'^member_management/edit_staff/(?P<staff_id>\d+)$',
views.edit_staff, name="edit_staff"),