首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django AllAuth和Django Crispy窗体

Django AllAuth和Django Crispy窗体
EN

Stack Overflow用户
提问于 2020-04-22 03:31:33
回答 1查看 1.2K关注 0票数 2

我试图覆盖默认的django-allauth模板,并通过改进的呈现使用django-crispy-forms,但是没有运气让表单真正提交,这意味着我按submit,什么也不会发生。

这是我的settings.py

代码语言:javascript
运行
复制
INSTALLED_APPS = [
    'about.apps.AboutConfig',
    'content.apps.ContentConfig',
    'users.apps.UsersConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
]

...

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

# All Auth settings

AUTHENTICATION_BACKENDS = (
    # Needed to login by username in Django admin, regardless of `allauth`
    'django.contrib.auth.backends.ModelBackend',

    # `allauth` specific authentication methods, such as login by e-mail
    'allauth.account.auth_backends.AuthenticationBackend',

)

SITE_ID = 1

ACCOUNT_USER_MODEL_USERNAME_FIELD = None
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_AUTHENTICATION_METHOD = 'email'

以下是我的自定义模板:

代码语言:javascript
运行
复制
{% extends "about/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
{% block navbar %}{% endblock %}

<div class="site-section mb-5">
  <div class="container">
   <div class="form-register">
     <form method="POST" class="signup" id="signup_form" action="{% url 'account_signup' %}">
         {% csrf_token %}
             <legend>Signup</legend>
             <div class="form-group">
               {{ form | crispy }}
            </div>
            <div class="form-group">
              <input type="submit" class="btn btn-primary" value="Sign Up">
            </div>
     </form>
    </div>
  </div>
</div>
{% endblock %}

我知道模板位于正确的位置,并且正确地覆盖了django-allauth默认模板,因为它呈现,但是为什么提交按钮不提交表单?我还知道django-allauth的一切都在工作,因为如果我删除自定义模板并使用django-allauth模板,它将提交表单并正确地重定向。

EN

回答 1

Stack Overflow用户

发布于 2020-06-10 15:54:53

我现在要自己动手了。实际上,我需要查看{{ form而赫脆脆}}的数据,才能确切地知道到底发生了什么。

然而,仅仅渲染一个类似的表单并提交是不够的。allauth有一些东西在后台运行(其中一些我并不完全了解)。我建议从allauth中提取模板并直接编辑它们,删除您知道不需要的标记,比如“扩展'allauth/base.html‘、标题等等。它们都是Here

然后,我遵循了第二个方法from this answer的详细信息,将表单添加为上下文处理器(对于我的案例使用最有用):

2. Contex处理器

a) Make文件夹your_project/your_app/context_processor。放置两个文件- __init__.pylogin_ctx.py

b) In login_ctx.py添加:

从allauth.account.forms导入LoginForm def login_ctx_tag(请求):返回{'loginctx':LoginForm()}

项目的your_app.context_processors.login_ctx.login_form_ctx' inTEMPLATESsection. Something like: TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE\_DIR, 'templates'), os.path.join(BASE\_DIR, 'templates', 'allauth')], 'APP\_DIRS': True, 'OPTIONS': { 'debug': DEBUG, 'context\_processors': [ 'your\_app.context\_processors.login\_ctx.login\_form\_ctx', # <- put your processor here 'django.template.context\_processors.debug', # [...other processors...] ], }, }, ] **d)** In your*.html`添加c)中的,您需要在其中添加下一个:

{% (如果不是user.is_authenticated %} {% csrf_token %} {{ loginctx }} Login {% Login %} {#在此显示其他内容.(用户名?)} {% endif %}

因此,如果您正在呈现您自己的表单,我建议您在自定义模板中呈现完全相同的allauth表单。

加上脆的标签,一切都是好的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61356833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档