Django - шаблон наследования с включениями - PullRequest
1 голос
/ 24 января 2011

У меня есть веб-приложение, в котором пользователи могут иметь профили (что-то вроде Facebook), и они могут просматривать свой собственный профиль, а также профили других людей. Все, что вы увидите в своем профиле, будет всем, но кто-то, просматривающий ваш профиль, может не увидеть всего на нем.

Для этого у меня есть common-profile.html и profile.html, где profile.html включает в себя common-profile.html, а common-profile.html - это то, что каждый может увидеть. Поэтому, если я хочу просмотреть свой собственный профиль, я бы увидел profile.html, а кто-то другой увидел бы common-profile.html.

Проблема в том, что при использовании наследования шаблонов оба эти шаблона наследуются от некоторого базового шаблона, поэтому шаблон импортируется дважды.

profile.html:

{% extends 'base.html' %}

{% block content %}
{% include 'common-profile.html' %}
...other stuff would go here
{% endblock %}

общего profile.html:

{% extends 'base.html' %}

{% block content %}
<h1>{{c_user.first_name}} {{c_user.last_name}}<h1>
...other stuff would go here
{% endblock %}

Это просто плохая идея? Должен ли я иметь только один профиль и проверять разрешения / использовать некоторые операторы if в тегах шаблона? Я не хочу, чтобы на моих html-страницах было слишком много логики, но если это просто некоторые операторы if, чтобы решить, что показывать, может, это нормально?

1 Ответ

6 голосов
/ 24 января 2011

Как насчет того, чтобы вместо использования включения вы сделали profile.html extension common-profile.html?Тогда просто добавьте пустой блок в шаблон общего профиля, к которому шаблон не-общего профиля может добавить материал.Примерно так:

common-profile.html:

{% extends 'base.html' %}

{% block content %}
    <!-- Normal common profile stuff -->

    {% block extendedcontent %}{% endblock extendedcontent %}
{% endblock content %}

profile.html:

{% extends 'common-profile.html' %}

{% block extendedcontent %}
    <!-- Special profile stuff -->
{% endblock extendedcontent %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...