如何将 django-sitegate 添加到模板或现有页面?

How do I add django-sitegate to a template or existing page?

我一直在学习 wagtail 教程 here,并且已经安装和配置了一些其他包的基本站点设置。

但是,在尝试添加 django-sitegate 以具有用户注册和登录功能时,我遇到了麻烦。我在这里遵循 sitegate 快速示例,它与文档中快速入门指南中的说明相同。

所以,我在 models.py

的顶部添加了以下内容
from django.shortcuts import render

from sitegate.decorators import sitegate_view

我在 models.py 的 'BlogPage' 模型中包含了以下内容:

@sitegate_view  # This also prevents logged in users from accessing our sign in/sign up page.
def entrance(request):
    return render(request, 'entrance.html', {'title': 'Sign in & Sign up'})

然后我将以下内容附加到我的 blog_page.html 模板中:

{% extends "blog_page.html" %}
{% load sitegate %}

{% block page_contents %}
    <div class="my_signin_block">
        {% sitegate_signin_form %}
    </div>
    <div class="my_signup_block">
        {% sitegate_signup_form %}
    </div>
{% endblock %}

这给出了错误

TemplateSyntaxError at /blog/
<ExtendsNode: extends "blog_page.html"> must be the first tag in the template.

因此,当我将扩展行移动到文件顶部时,它起作用了,但是返回了一个空白的 html 页面,其中包含用于调整视口的基本 bootstrap 代码,以及单个空 div.

然而,当将模板代码放入它自己的文件 site_gate.html 时,我在尝试通过 blog/site_gate.html

访问它时收到 404 错误

我通过我的站点对 blog_page.html 进行了递归 grep,但似乎找不到定义视图或模型模板的位置。我不确定如何将我的 site_gate 模板添加到模板列表中。

我正在尝试获得一个简单的站点门注册页面,最终能够将其包含在我的 blog_page.html 模板的模态中。

我哪里错了?

"appended to the template" 是什么意思?您不直接在它应该继承的文件中添加 {% extend %} 标记,而是在它自己的模板中添加。然后,您可以从您的视图中调用此子模板。

我不知道您的文件结构,但通常您会有一个文件夹 <your_app_name>,其中包含您的 models.py、views.py 等。在该文件夹中,您创建Template 文件夹和其中的 <your_app_name> 文件夹,其中将包含您应用的模板。

my_app
|
--- Template
|     |
|     --- my_app
|          |
|          --- a_template.html
---models.py
---views.py
...

你的my_app.views.py

@sitegate_view  # This also prevents logged in users from accessing our sign in/sign up page.
    def entrance(request):
        return render(request, 'my_app/a_template.html', {'title': 'Sign in & Sign up'})

你的my_app.url.py

from django.urls import path
from . import views

app_name = 'my_app'
urlpatterns = [
    path('some_name/', views.entrance, name='some_name'),
]

并确保您应用的网址包含在 <name_of_your_project> 文件夹中

您的 <name_of_your_project>.urls.py 必须包括:

from django.urls import include
...
urlpatterns = [
    ...
    path('my_app/', include('my_app.urls')),
    ...
]

所以现在当您访问 www.myawsomesite/my_app/some_name/ 时,它将调用您的 entrance 视图,该视图将呈现并 return a_template.html.