当我试图添加一个新的菜单项时,我的程序以某种方式生成了两个斜杠//。不知道怎么解决
请求方式:POST请求URL:http://127.0.0.1:8000/restaurant/menu/desserts-menu//add_menuItem/
使用
WAD_Group_Project.urls
中定义的 URLconf,Django 按以下顺序尝试了这些 URL 模式:
[名称='索引']
餐厅/ [name='index']
餐厅/关于/ [name='about']
餐厅/菜单/
餐厅/菜单/
餐厅/菜单/
餐厅/ add_menu/ [name='add_menu']
餐厅/菜单/
餐厅/受限/ [name='restricted']
管理员/
账户/
^媒体/(?P
当前路径,
restaurant/menu/desserts-menu//add_menuItem/
,与这些路径都不匹配。
你看到这个错误是因为你的 Django 设置文件中有
DEBUG = True
。将其更改为False
,Django 将显示标准的 404 页面。
网址.py
from django.urls import path
from restaurant import views
app_name = 'restaurant'
urlpatterns = [
path('', views.index, name='index'),
path('about/', views.about, name = 'about'),
path('menu/<slug:menu_name_slug>/add_menu_item/', views.add_menu_item, name='add_menu_item'),
path('menu/<slug:menu_name_slug>/', views.show_menu, name='show_menu'),
path('menu/<slug:menu_name_slug>/<slug:menuItem_name_slug>/', views.show_menu_item, name='show_menu_item'),
#Template shows form but without any functionality
path('add_menu/', views.add_menu, name="add_menu"),
path('menu/<slug:menu_name_slug>/<slug:menuItem_name_slug>/add_review/', views.add_review, name="add_review"),
path('restricted/', views.restricted, name='restricted'),
]
Views.py
def show_menu(request,menu_name_slug):
context_dict = {}
try:
menu = Menu.objects.get(slug=menu_name_slug)
menuItems = MenuItem.objects.filter(menu=menu)
context_dict['menuItems'] = menuItems
context_dict['menu'] = menu
except Menu.DoesNotExist:
context_dict['menu'] = None
context_dict['menuItems'] = None
return render(request, 'restaurant/menu.html', context=context_dict)
def show_menu_item(request, menu_name_slug, menuItem_name_slug):
context_dict = {}
try:
menu = Menu.objects.get(slug=menu_name_slug)
menuItem = MenuItem.objects.get(slug=menuItem_name_slug)
reviews = Review.objects.filter(menuItem=menuItem)
context_dict['reviews'] = reviews
context_dict['menuItem'] = menuItem
context_dict['menu'] = menu
except Menu.DoesNotExist:
context_dict['menu'] = None
context_dict['menuItem'] = None
context_dict['reviews'] = None
return render(request, 'restaurant/menu_item.html', context=context_dict)
@login_required
def add_menu_item(request, menu_name_slug):
try:
menu = Menu.objects.get(slug=menu_name_slug)
except Menu.DoesNotExist:
menu = None
if menu is None:
return redirect('/restaurant/')
form = MenuItemForm()
if request.method == 'POST':
form = MenuItemForm(request.POST)
if form.is_valid():
if menu:
menuItem = form.save(commit=False)
menuItem.menu = menu
menuItem.save()
return redirect(reverse('restaurant:show_menu', kwargs={'menu_name_slug': menu_name_slug}))
else:
print(form.errors)
context_dict = {'form': form, 'menu': menu}
return render(request, 'restaurant/add_menuItem.html', context=context_dict)
@login_required
def add_review(request, menu_name_slug, menuItem_name_slug):
try:
menuItem = MenuItem.objects.get(slug=menuItem_name_slug)
except MenuItem.DoesNotExist:
menuItem = None
if menuItem is None:
return redirect('/restaurant/')
form = ReviewForm()
if request.method == 'POST':
form = ReviewForm(request.POST)
if form.is_valid():
if menuItem:
review = form.save(commit=False)
review.menuItem = menuItem
review.save()
return redirect(reverse('restaurant:show_menu_item', kwargs={'menuItem_name_slug': menuItem_name_slug}))
else:
print(form.errors)
context_dict = {'form': form, 'menuItem': menuItem}
return render(request, 'restaurant/add_review.html', context=context_dict)