2016-03-24 3 views
0

ich mein Setup Navigationsleiste in meinem base.html haben wieSie etwas in Base auf einer bestimmten Vorlage Seite nicht tun - Django

folgt
<ul> 
      <li><a href="{% url 'home' %}">Home</a></li> 
      <li><a href="{% url 'about' %}">About</a></li> 
      <li><a href="{% url 'contact' %}">Contact</a></li> 

    {% if user.is_authenticated %} 
     <li><a href="{% url 'auth_logout' %}">Logout</a></li> 

     <li><a href="{% url 'thing_detail' slug=user.thing.slug %}">My Profile</a></li> 

    {% else %} 
     <li><a href="{% url 'auth_login' %}">Login</a></li> 

    <li><a href="{% url 'registration_register' %}">Register</a></li> 
    {% endif %} 
    </ul> 

Das Problem ist jetzt, dass ich tun nicht wollen führen Sie das {% if%} Block, wenn der Benutzer nicht authentifiziert ist, und wenn ich eine bestimmte Vorlage Seite also bin Rendering

create_thing.html

{% extends 'layouts/base.html' %} 
{% block title %} Create a Thing 
- {{ block.super }}{% endblock %} 
{% block content %} 
<div id="content"> 
<h1> Create a Thing </h1> 
<form role="form" action="" method="post"> 
{% csrf_token %} 
{{ form.as_p }} 
<input type="submit" value="Submit" /> 
</form> 
</div> 
{% endblock %} 

einfach kopieren Der Inhalt von Base und Einfügen nach dem Entfernen hilft nicht. Es führt immer noch base.html aus und geht in die if-Anweisung und zeigt einen Fehler an, weil slug nicht definiert wird, bis ich die Details in create_thing.html ausgefüllt habe.

Antwort

0

Versuchen Sie, die {% if %} Klausel in eine andere {% if not aux_var %} Klausel zu verschachteln. Wenn Sie das erste if nicht ausführen möchten, übergeben Sie "aux_var":1 als Kontext an den Renderer.

+0

Wo definiere ich diese Variable? –

+0

Aus Ihrer Sicht, übergeben Sie es so wie Sie mit Ihrem Formular in '{{form.as_p}}' –

+1

Vielen Dank @ felício Works great. BTW Kann ich "und" anstelle von zwei if-Anweisungen verwenden? Wenn ja, kannst du bitte die Syntax angeben? –

Verwandte Themen