【问题标题】:Django SyntaxErrorDjango 语法错误
【发布时间】:2021-09-07 00:29:00
【问题描述】:

目前正在进行 PythonCrashCourse2ndEd 的练习。 (第 18 章,Ex.8),我得到一个 SyntaxError: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')

【问题讨论】:

  • path('', views.index, name='index') 后面少了一个逗号...
  • 我无语了,我看了一百多遍都看不出来。非常感谢!
  • urlpatterns 列表末尾也缺少],但我猜这是一个剪切和粘贴错误。

标签: python django django-urls


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    我想知道您是否也注意到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
    ]
    

    【讨论】:

      【解决方案3】:

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

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

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

      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)
      

      【讨论】:

        【解决方案4】:

        在 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')
        ]
        

        【讨论】:

          猜你喜欢
          • 2011-08-05
          • 1970-01-01
          • 2021-06-25
          • 2011-07-30
          • 2011-04-30
          • 1970-01-01
          相关资源
          最近更新 更多