扩展 Django-Oscar 的问题 layout.html

Problem Extending Django-Oscar's layout.html

这个问题是在我给一个最小的webapp添加模板后出现的。模板 extends django-oscar 的 layout.html。项目中没有其他内容 extends layout.html.

我的目标只是能够使用 django-oscar 模板在我的 webapp 中形成网页的基础。出于某种原因,我没有结束的问题。这只是最新的错误消息。几天来我一直在为此苦苦挣扎!当我解决一个问题时,另一个问题又出现了。

我为这个问题做了一个最小的 git 回购:https://github.com/mslinn/django_oscar_problem 回购有一个 requirements.txt 文件,以防有人想安装必要的 PIP 模块 运行 程序。

我试图确保我有最简单的项目来说明问题。在 README.md 中,我显示了网络浏览器中显示的完整错误消息。

# /templates/welcome.html

{% extends 'oscar/layout.html' %}
... etc ...
# main/urls.py

from django.urls import include, path
from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, 'home'),
    path('admin/', admin.site.urls, 'admin'),
    path('hello/', views.hello, 'hello'),

    path('', include(apps.get_app_config('oscar').urls[0])),
]
# main/views.py

from django.shortcuts import render

def home(request):
    return render(request, "welcome.html", {})

然后我 运行 webapp 有:

$ ./manage.py runserver

访问http://localhost:8000后网络浏览器中的错误信息是:

ValueError at /

dictionary update sequence element #0 has length 1; 2 is required

Request Method:     GET
Request URL:    http://localhost:8000/
Django Version:     3.1.6
Exception Type:     ValueError
Exception Value:

dictionary update sequence element #0 has length 1; 2 is required

问题在这里:

urlpatterns = [
    path('', views.home, 'home'),
    path('admin/', admin.site.urls, 'admin'),
    path('hello/', views.hello, 'hello'),

    path('', include(apps.get_app_config('oscar').urls[0])),
]

您传递给 path() 的参数不太正确。路径的 signature 是:

path(route, view, kwargs=None, name=None)

即,第三个位置参数应该 kwargs 传递给视图函数 - 但您传递的是一个字符串,这就是导致有些模糊错误的原因。我认为您打算将其设为 name,在这种情况下,您需要将其作为命名参数提供,即:

urlpatterns = [
    path('', views.home, name='home'),
    path('admin/', admin.site.urls, name='admin'),
    path('hello/', views.hello, name='hello'),

    path('', include(apps.get_app_config('oscar').urls[0])),
]

请注意,这会导致示例存储库中出现新的 TemplateDoesNotExist 错误 - 这是因为 templates 目录的位置不是 Django 知道的位置。您可以通过将该目录的路径添加到模板设置中的 DIRS 配置来解决此问题,该配置当前设置为 [].