Tit*_*ter 0 django django-templates django-allauth
我有一个固定的导航,我想添加下拉框,用户可以在其中单挑\(如Twitter使用).
我试过了:
# project/tempates/signup.html
{% load i18n %}
{% load account socialaccount %}
{% block head_title %}{% trans "Signup" %}{% endblock %}
{% block content %}
<h1>{% trans "Sign Up" %}</h1>
<p>{% blocktrans %}Already have an account? Then please <a href="{{ login_url }}">sign in</a>.{% endblocktrans %}</p>
<form class="signup" id="signup_form" method="post" action="{% url 'account_signup' %}">
{% csrf_token %}
{{ signupform.as_p }}
{% if redirect_field_value %}
<input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" />
{% endif %}
<button type="submit">{% trans "Sign Up" %} »</button>
</form>
{% endblock %}
# project/tempates/base.html
# ... a lot of basic stuff
<li class="dropdown">
<a class="dropdown-toggle" href="#" data-toggle="dropdown">Sign In <strong class="caret"></strong></a>
<div class="dropdown-menu" style="padding: 15px; padding-bottom: 0px;">
{% include './signup.html' %}
# ... rest stuff
Run Code Online (Sandbox Code Playgroud)
在下拉框中,我只看到文本,登录链接以及确认注册的按钮.
没有字段可以输入电子邮件和密码.据我了解,这是因为无法访问表单,通常是视图的工作.我怎样才能获得可行的下拉表格?
经过2天的互联网挖掘,我想总结一下我发现的东西.
有几种方法:
1.使用<form action='some address here'>.最简单的方法.
要检查默认AllAuth表单,我们需要:
# ./manage.py shell
>>> import allauth.account.forms as forms
>>> f = forms.LoginForm()
>>> print(f)
Run Code Online (Sandbox Code Playgroud)
以下是已编辑的版本,print(f)直接添加到base.html
<form action="{% url 'account_login' %}" method="post">
{% csrf_token %}
<input type="hidden" name="next" value="{{ request.get_full_path }}" />
<input id="id_login" name="login" placeholder="Username or e-mail" type="text" required />
<input id="id_password" name="password" placeholder="Password" type="password" required />
<label for="id_remember">Remember Me:</label>
<input id="id_remember" name="remember" type="checkbox" />
<button type="submit">Login</button>
<a href="{% url 'account_reset_password' %}">Forgot Password?</a>
</form>
Run Code Online (Sandbox Code Playgroud)
方法是基于 - > 这里的解决方案< -
2. Contex处理器
a)制作文件夹your_project/your_app/context_processor.放2个文件 - __init__.py和login_ctx.py
B)在login_ctx.py添加:
from allauth.account.forms import LoginForm
def login_ctx_tag(request):
return {'loginctx': LoginForm()}
Run Code Online (Sandbox Code Playgroud)
c)在项目中SETTINGS添加your_app.context_processors.login_ctx.login_form_ctx' inTEMPLATES`部分.就像是:
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...]
],
},
},
]
Run Code Online (Sandbox Code Playgroud)
d)在*.html你需要的地方添加下一个:
{% if not user.is_authenticated %}
<form action="{% url 'account_login' %}" method="post">
{% csrf_token %}
<input type="hidden" name="next" value="{{ request.get_full_path }}" />
{{ loginctx }}
<button type="submit">Login</button>
</form>
{% else %}
{# display something else here... (username?) #}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
3.模板标签
a)制作文件夹your_project/your_app/templatetags.放2个文件 - __init__.py和login_tag.py
B)在login_tag.py添加:
from django import template
from allauth.account.forms import LoginForm
register = template.Library()
@register.inclusion_tag('profiles/true_login.html')
def login_form_tag(current_page=None):
return {'loginform': LoginForm(),
'redirect_to': current_page}
Run Code Online (Sandbox Code Playgroud)
c)在包含内容的your_project/your_app/templates/your_app/make文件中login_form.html:
{% load account %}
{% if not user.is_authenticated %}
<form action="{% url 'account_login' %}" method="post">
{% csrf_token %}
<input type="hidden" name="next" value="{{ redirect_to }}" />
{{ loginform }}
<button type="submit">Login</button>
</form>
{% else %}
{# display something else here... (username?) #}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
d)在*.html您需要的任何地方,添加顶部{% load login_tag %}和所需的地方添加{% login_form_tag request.get_full_path %}
第二种和第三种方法显示原生AllAuth形式.如果你需要以某种方式编辑它,使用{{form}}- > here < - 在文档中你可以找到一些例子如何做到这一点.想要提一下,如果在文档中显示的内容如下:
<div class="fieldWrapper">
{{ form.subject.errors }}
{{ form.subject.label_tag }}
{{ form.subject }}
</div>
Run Code Online (Sandbox Code Playgroud)
对于我们的情况form必须改为loginctx或loginform
您也可以编写自己的表单或继承AllAuth并将其导入context processor或templatetag如上所示.
这两种方法都基于 - > 此解决方案 < -
在所有3种方法中,重定向根据需要工作(如果成功登录,则将用户返回到上一页,否则重定向到原始AllAuth模板site.com/account/login).
以上所有内容都可以实现到SignUP.
另外我问了一些人,如果错误的用户名\密码而不是重定向到如何显示错误site.com/account/login,一个命题是使用AJAX,但目前这是我所知道的.可以找到有关连接signin\up表单到默认AllAuth视图的一些基本信息 - > 此处 < - .如果有人可以实现它,或找到任何教程,请在此处发布.
| 归档时间: |
|
| 查看次数: |
912 次 |
| 最近记录: |