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

时间:2018-06-25 21:39:11

标签: django wagtail

我一直在关注wagtail教程here,并进行了基本的站点设置,并安装和配置了一些其他软件包。

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

因此,我在模型顶部添加了以下内容。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页面,其中包含用于调整视口的基本引导程序代码和一个空div。

但是,当将模板代码放入自己的文件site_gate.html时,尝试通过blog / site_gate.html访问它时出现404错误

我在我的网站上为blog_page.html做了一个递归grep,但似乎找不到定义视图或模型模板的位置。我不确定如何将site_gate模板添加到模板列表中。

我试图获得一个简单的sitegate注册页面,以便最终能够将其包含在我的blog_page.html模板的模式中。

我要去哪里错了?

1 个答案:

答案 0 :(得分:1)

“附加到模板”是什么意思?您不能直接在假定继承的文件中添加[0-9\s]+(,[0-9\s]+)*[0-9]?$标记,而要在其自己的模板中添加标记。然后,您可以从视图中调用此子模板。

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

<your_app_name>

您的my_app.views.py

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

您的my_app.url.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'})

并确保您的应用的网址包含在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>。urls.py必须包含:

<name_of_your_project>

因此,现在访问www.myawsomesite / my_app / some_name /时,它将调用您的from django.urls import include ... urlpatterns = [ ... path('my_app/', include('my_app.urls')), ... ] 视图,该视图将呈现并返回a_template.html。