Django 语法错误

Django SyntaxError

目前正在做 PythonCrashCourse2ndEd 的练习。 (Ch.18, Ex.8),我得到一个 SyntaxError: Invalid syntax on urls.py。 (第 13 行 path('pizza/', views.index, name='pizza), 我试过直接导入文件到shell, 还是一样的错误.

urls.py

"""Defines URL patterns for pizzas"""
from django.urls import path

from . import views

app_name = 'pizzas'

urlpatterns = [
    #Home page
    path('', views.index, name='index')

    #Page that shows all the pizzas.
    path('pizza/', pizzas.index, name='pizza')
    ]

views.py

from django.shortcuts import render
from .models import Pizza

def index(request):
    """The home page for pizzas."""
    return render(request, 'pizzas/index.html')

def pizzas(request):
    """Show all the pizzas"""
    pizzas = Pizza.objects.all()
    context = {'pizzas': pizzas}
    return render(request, 'pizzas/pizzas.html', context)

pizzas.html

<!--Inherits from base.html-->
{% extends "pizzas/base.html" %}

{% block content %}

  <p>Pizzas</p>

  <ul>
    {% for pizza in pizzas %}
      <li>{{ pizza }}</li>
    {% empty %}
      <li>No pizzas have been added yet.</li>
    {% endfor %}
  </ul>

{% endblock content %}

错误

>>> import pizzas.urls
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "C:\Users\Heyale\OneDrive\Desktop\pizzeria\pizzas\urls.py", line 13
    path('pizza/', views.index, name='pizza')

您在第一个路径后缺少逗号,并且在 urlpatterns 中还缺少右括号“]”。应该是:

urlpatterns = [
    #Home page
    path('', views.index, name='index'),

    #Page that shows all the pizzas.
    path('pizza/', views.index, name='pizza')
]

在 urls.py 中,您为 index 和 pizza 放置了相同的路径。您正在为披萨路由 (def index) 函数。

你应该这样做,它会帮助你

from django.urls import path

from . import views

app_name = 'pizzas'

urlpatterns = [
    #Home page
    path('', views.index, name='index')

    #Page that shows all the pizzas.
    path('pizza/', views.pizza, name='pizza')
]

urlpatterns 是一个数组,所以你必须用逗号分隔路径元素:

urlpatterns = [
    #Home page
    path('', views.index, name='index'),
    path('pizza/', views.index, name='pizza')
]

要获取 django 中的所有 URL 模式 shell 输入:

import urls
def show_urls(urllist, depth=0):
    for entry in urllist:
        print("  " * depth, entry.regex.pattern)
        if hasattr(entry, 'url_patterns'):
            show_urls(entry.url_patterns, depth + 1)
show_urls(urls.urlpatterns)

我想知道您是否也注意到它不仅仅是 urlpatterns 列表中缺少的 ,。但是您也一直在尝试使用不适合您的披萨路径的视图 'pizza/'.

你拥有的是:

urlpatterns = [
    #Home page
    path('', views.index, name='index')

    #Page that shows all the pizzas.
    path('pizza/', pizzas.index, name='pizza')
]

应该是什么:

urlpatterns = [
    #Home page
    path('', views.index, name='index'), # comma added here
    
    #Page that shows all the pizzas.
    path('pizza/', views.pazzas, name='pizza') # changed pizzas.index to views.pazzas
]