扩展 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 配置来解决此问题,该配置当前设置为 []
.
这个问题是在我给一个最小的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 配置来解决此问题,该配置当前设置为 []
.