gpt4 book ai didi

python - 找不到参数 'wagtailadmin_explore' ',)' 的 '(' 反向

转载 作者:行者123 更新时间:2023-12-02 21:32:14 29 4
gpt4 key购买 nike

我一直在尝试将我的 Wagtail 网站重建为要在 Fargate 上运行的 docker 容器。由于某些原因,我从头开始并重建了所有依赖项。在 pip 安装完所有内容后,该站点使用 venv 在本地运行良好。
但是,在 Docker 容器中启动时出现奇怪的错误。任何人都可以帮我确定解决此问题的方法吗?
我在/admin 收到以下错误:

Error during template rendering
In template /usr/local/lib/python3.8/site-packages/wagtail/admin/templates/wagtailadmin/home/site_summary_pages.html, error at line 4

Reverse for 'wagtailadmin_explore' with arguments '('',)' not found. 1 pattern(s) tried: ['admin/pages/(?P<parent_page_id>[0-9]+)/$']
1 {% load i18n wagtailadmin_tags %}
2
3 <li class="icon icon-doc-empty-inverse">
4 <a href="{% url 'wagtailadmin_explore' root_page.pk %}">
5 {% blocktrans count counter=total_pages with total_pages|intcomma as total %}
6 <span>{{ total }}</span> Page <span class="visuallyhidden">created in {{ site_name }}</span>
7 {% plural %}
8 <span>{{ total }}</span> Pages <span class="visuallyhidden">created in {{ site_name }}</span>
9 {% endblocktrans %}
10 </a>
11 </li>
12
我的 Docker 基础镜像是 Python 3.8 Alpine。我已经区分了本地和 Docker 的 pip freeze ,并且包的版本是相同的。所有迁移都在 docker 和本地运行。
在下面的评论中讨论之后,似乎问题可能出在我的 Docker 文件上。我正在为 Wagtail 部署一个 Python 3.8 容器,并为数据库部署一个 postgres 容器。当我放下然后在 postgres 容器上重新创建数据库时,错误就消失了。因此,在部署站点时,迁移出了点问题,但我不知道它可能是什么......
我的 docker 文件如下:
# pull official base image
FROM python:3.8.0-alpine

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install psycopg2 dependencies
RUN apk update \
&& apk add postgresql-dev gcc python3-dev \
musl-dev bash libffi-dev zlib zlib-dev make jpeg jpeg-dev

# install dependencies
RUN pip install --upgrade pip
COPY ./requirements.txt /usr/src/app/requirements.txt
RUN pip install -r requirements.txt

# copy entrypoint.sh
COPY ./entrypoint.sh /usr/src/app/entrypoint.sh

# copy project
COPY . /usr/src/app/

# run entrypoint.sh
ENTRYPOINT ["/usr/src/app/entrypoint.sh"]
和我的入口点文件:
#!/bin/sh

if [ "$DATABASE" = "postgres" ]
then
echo "Waiting for postgres..."

while ! nc -z $SQL_HOST $SQL_PORT; do
sleep 0.1
done

echo "PostgreSQL started"
fi

python manage.py flush --no-input
python manage.py migrate
python manage.py collectstatic --no-input --clear
python manage.py runserver 0.0.0.0:8000

exec "$@"
和我的 docker 撰写文件:
version: '3.7'

services:
web:
build: ./
command: python manage.py runserver 0.0.0.0:8000
volumes:
- ./:/usr/src/app/
ports:
- 8000:8000
env_file:
- ./.env.dev

db:
image: postgres:12.0-alpine
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=blog_project

volumes:
postgres_data:

最佳答案

这可能是因为您在迁移后删除了数据库(或其中的一部分)。 wagtailcore_page表在不应该是空的时候可能是空的。
使用鹡鸰,当你运行 python manage.py migrate ,迁移不仅会创建所需的表,还会用初始根页面填充它,您可以从该页面构建站点结构。删除此页面时,您将收到您指定的错误。{% url 'wagtailadmin_explore' root_page.pk %}是这里的罪魁祸首。鹡鸰试图扭转 wagtailadmin_explore带有 root_page.pk 的 url,但在您的情况下为 root_page是无。
简单运行python manage.py migrate再次不起作用,因为 Wagtail 将假定它的迁移已经运行,并且它不会再次创建根页面。
要解决此问题,请完全删除您的数据库并运行 python manage.py migrate ,或将正确的数据库传递到您的 Docker 容器中。
最好使用 wagtail 界面来删除、重组或更改页面。过去我遇到了很多问题,我破坏了 Wagtail 安装。
编辑:
我认为你应该删除 python manage.py flush --no-input在 entrypoint.sh 中。每次运行容器时都会执行此文件,这意味着每次调用 docker run 时都会刷新数据库或 docker-compose up .flush将清除所有数据,但保留实际表。如果你运行 migrate ,然后 flush然后 migrate再次,它会发现没有要应用的迁移(因为它们已经被应用),因此创建根页面的迁移也不会运行。
我不完全确定您为什么要每次都刷新数据库,尤其是在 Docker 容器中。如果您想从一个新数据库开始,最好将其作为一次性命令运行,并且最好通过 psql 删除所有表。

关于python - 找不到参数 'wagtailadmin_explore' ',)' 的 '(' 反向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64190146/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com