2016-08-29 1 views
0

Ich habe eine feste Navigation und ich möchte Drop-Down-Box hinzuzufügen, in denen Benutzer \ SINGUP können (wie Twitter verwendet).Wie verschiebe ich singup signin Vorlagen in das Dropdown-Menü?

Ich habe versucht:

# 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" %} &raquo;</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 

und in Drop-Down-Box Ich sehe nur den Text, Link, und die Taste zur Bestätigung der Anmeldung signin.

Es gibt keine Felder E-Mail und Passwort einzugeben. Wie ich es verstehe, liegt das daran, dass es keinen Zugriff auf das Formular gibt, was normalerweise die Jobs einer Views sind. Wie kann ich brauchbare Dropdown-Formulare erhalten?

+0

Können Sie Ihre Ansicht in den Beitrag aufnehmen? –

+0

@MichaelFourre, es scheint, dass hier ein Problem besteht. Ich fand bei SO (Beispiel - http://stackoverflow.com/questions/29499449/django-allauth-login-signup-form-on-homepage) und im Internet (http://notesbyanerd.com/joint-login-and) -signup-django-allauth-view) einige Ansichten Beispiele, aber ich habe keine Ahnung, wie man sie mit dem Dropdown-Formular verbinden. Ursprüngliche Ansichten sind hier - https://github.com/pennersr/django-allauth/blob/master/allauth/account/views.py – TitanFighter

+0

Aber wo ist deine Ansicht? Verwenden Sie die SignupView als übergeordnete Klasse? –

Antwort

3

Nach 2 Tagen der Internet-Graben möchte ich zusammenfassen, was ich gefunden habe.

Es gibt nur wenige Möglichkeiten:

1. Verwenden Sie <form action='some address here'>. Der einfachste Weg.

AllAuth Formen Um zu prüfen Standard wir brauchen:

# ./manage.py shell 
>>> import allauth.account.forms as forms 
>>> f = forms.LoginForm() 
>>> print(f) 

Below Version von print(f) bearbeitet wird, die direkt

Methode base.html hinzugefügt wird, auf der Lösung basiert aus ->here < -

2. Contex Prozessor

a) Ordner your_project/your_app/context_processor erstellen. Setzen Sie es 2 Dateien - __init__.py und login_ctx.py

b) In login_ctx.py add:

from allauth.account.forms import LoginForm 

def login_ctx_tag(request): 
    return {'loginctx': LoginForm()} 

c) In Projekt SETTINGS hinzufügen your_app.context_processors.login_ctx.login_form_ctx' in TEMPLATES` Abschnitt. Etwas wie:

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 Ihrem *.html, wo Sie die nächsten müssen hinzufügen:

{% 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 %} 

3. Template-Tag

a) Make Ordner your_project/your_app/templatetags.Setzen Sie es 2 Dateien - __init__.py und login_tag.py

b) In login_tag.py add:

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} 

c) In your_project/your_app/templates/your_app/ make Datei login_form.html mit Inhalt:

{% 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 %} 

d) In jedem *.html müssen Sie oben hinzufügen {% load login_tag %} und in der gewünschten Stelle {% login_form_tag request.get_full_path %}


2. und 3. Methoden hinzufügen zeigen nativen AllAuth Form. Wenn Sie es irgendwie bearbeiten müssen mit {{form}}, ->here < - im Dokument finden Sie einige Beispiele, wie Sie das tun. erwähnen wollen, dass in dem Dokument, wenn gezeigt so etwas wie:

<div class="fieldWrapper"> 
    {{ form.subject.errors }} 
    {{ form.subject.label_tag }} 
    {{ form.subject }} 
</div> 

für unseren Fall form muss loginctx oder loginform

geändert werden Sie können auch Ihre eigene Form schreiben oder erben AllAuth und importieren zu context processor oder templatetag wie oben gezeigt.

Beide Methoden basieren auf ->this solution < -

In allen drei Methoden arbeitet je nach Bedarf umleiten (Rückkehr einen Benutzer zur vorherigen Seite, Umleitung im Falle des Erfolgs Login, sonst original AllAuth Vorlage bei site.com/account/login) .

Alle oben beschriebenen können für SignUP implementiert werden.

Auch ich fragte einige Leute, wie man Fehler im Fall von falschem Benutzernamen \ Passwort statt Umleitung zu , ein Vorschlag war, AJAX zu verwenden, aber das ist derzeit aus meinem Wissen heraus. Einige Basisinformationen über Verbindungsanmeldungsformulare zum Standard AllAuth Ansichten können gefunden werden ->here < -. Wenn irgendjemand es implementieren könnte oder ein Tutorial finden könnte, bitte poste es hier.

Verwandte Themen