在 URL 中生成 // (Django)

问题描述 投票:0回答:0

当我试图添加一个新的菜单项时,我的程序以某种方式生成了两个斜杠//。不知道怎么解决

找不到页面 (404)

请求方式:POST请求URL:http://127.0.0.1:8000/restaurant/menu/desserts-menu//add_menuItem/

使用

WAD_Group_Project.urls
中定义的 URLconf,Django 按以下顺序尝试了这些 URL 模式:

  1. [名称='索引']

  2. 餐厅/ [name='index']

  3. 餐厅/关于/ [name='about']

  4. 餐厅/菜单//add_menu_item/ [name='add_menu_item']

  5. 餐厅/菜单// [name='show_menu']

  6. 餐厅/菜单/// [name='show_menu_item']

  7. 餐厅/ add_menu/ [name='add_menu']

  8. 餐厅/菜单///add_review/ [name='add_review']

  9. 餐厅/受限/ [name='restricted']

  10. 管理员/

  11. 账户/

  12. ^媒体/(?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)
python django django-views django-urls django-url-reverse
© www.soinside.com 2019 - 2024. All rights reserved.