开发者

django - How can I render a template I use everywhere in my webpage?

开发者 https://www.devze.com 2023-03-15 04:44 出处:网络
I\'m using django 1.2.4. I have a template for login in registration/login.html (wich action is django.contrib.auth.views.login) and I want to include it on everypage. I created a block on my base.ht

I'm using django 1.2.4. I have a template for login in registration/login.html (wich action is django.contrib.auth.views.login) and I want to include it on everypage. I created a block on my base.html as I do for every template. The thing is the browser doesn't recognize this login block and I think it is because I only render a template for each view, I am not rendering this login template.

Here is my f开发者_JAVA技巧older structure:

/templates/
    base.html
    /myapp/
        object_list.html
        ...
    /registration/
        login.html

...and here is my login.html:

{% extends "base.html" %}
{% block mylogin %}
<div class="horizontal">
    {% if form.errors %}
        <p>Your username and password didn't match. Please try again.</p>
    {% endif %}
    <form action="{% url django.contrib.auth.views.login %}" method="post">
        {% csrf_token %}
        <div class="login_box">
            <div class="login_text">{{ form.username.label_tag }}</div><div class="login_input">{{ form.username }}</div>
            <div class="password_text">{{ form.password.label_tag }}</div><div class="password_input">{{ form.password }}</div>
            <input id="button_login" type="submit" value="" />
        </div>
    </form>
</div>
{% endblock %}

...and in my base.html I have:

<div id="some_div">
    {% block mylogin %} {% endblock %}
</div>

I have a basestyle.css included in base.html and the other templates inherit correctly too... it seems to be a block problem...

So.. how can I render this template for every view??

Thank you


I think you are looking for the include tag. This way you can include your login html snippet in your base.html :

{% include "/registration/login.html" %}


What I really need was to create a templatetag in templatetags/mytags.py, where I define a function called get_login wich looks like this:

@register.inclusion_tag('registration/login.html', takes_context=True)
def get_login(context):
    ...
    return {'formLogin':  mark_safe(AuthenticationForm())}

...and in base.html:

{% load mytags  %}{% get_login  %}

The problem now is that the template (registration/login.html) doesnt recognize '{{ formLogin.username }}','{{ formLogin.password }}' and so on.

What am I missing?

Update 1:

mark_safe returns an instance of django.utils.safestring.SafeString, not a form. Use (AuthenticationForm() instead of mark_safe(AuthenticationForm()) and it works!

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号