Как получить версию страницы без макета? - PullRequest
0 голосов
/ 20 августа 2010

У меня есть несколько страниц, таких как пользовательское соглашение, которое я хочу отображать с макетом или без него (тег extends) в зависимости от того, как он вызывается. Я использую jQuery Fancybox для загрузки этих страниц в фреймах. Если JS отключен, ссылки должны открываться в новом окне с полным макетом, в противном случае, если они находятся в iframe, макет им не нужен.

На данный момент я использую jQuery для удаления верхнего / нижнего колонтитула (заменяя тело только частью содержимого)

if(window.location != window.parent.location) {
    $('body').html($('#content'));
}

Но кажется неправильным загружать вещи, которые никогда не будут отображаться (или, что еще хуже, будут отображаться в течение полсекунды, пока не активируется JS). Я думаю, что я мог бы сделать, это создать частичный шаблон, содержащий только содержимое, а затем две страницы контейнера, одну с верхним / нижним колонтитулом и одну без; они оба включают частичное. Затем используйте JS, чтобы изменить ссылку ... которая должна указывать на разные представления, которые, в свою очередь, будут вызывать разные шаблоны ... кажется очень большой работой. Должен быть лучший способ?


@ ZeissS:

Нечто подобное не возможно в Django:

{% if not iframe %}
    {% extends "layouts/default.html" %}
{% endif %}

Тег {% extends %} должен быть первым тегом в шаблоне, поэтому он не может быть закомментирован условно. Я думаю, может быть, я мог бы сделать это в самом макете ... и тогда это применимо ко всем моим страницам ... давайте попробуем это.

Ответы [ 3 ]

1 голос
/ 20 августа 2010

Используя ответ Брайана и Марка в качестве основы, вы можете написать собственный контекстный процессор: http://docs.djangoproject.com/en/1.2/ref/templates/api/#writing-your-own-context-processors

Это позволит вам условно подавать операторы if в ваших шаблонах.

Вероятно, самый элегантный, так как вы все еще можете использовать обертку по мере необходимости.

Вы можете комбинировать это с вашим собственным тегом шаблона, который предоставляет вам расширенную функциональность, но условно на основе предоставленной переменной. (Не уверен, что вы можете повторить расширяет функциональность).

http://docs.djangoproject.com/en/1.2/howto/custom-template-tags/#writing-custom-template-tags

Другой вариант - использовать тег {% include %} django, и вы можете обернуть его, используя операторы if.

1 голос
/ 20 августа 2010

Вы всегда можете передать параметр GET и загрузить другой шаблон или изменить сам шаблон.

Для некоторых URL, например example.com/some/view/?show_simple=yes:

show_simple = request.GET.get('show_simple', False)

if show_simple:
    # return minimal template
# return regular template
0 голосов
/ 20 августа 2010

Измените свой макет, чтобы условно включить нижний колонтитул ...

    {% if not iframe %}
    <div id="header">
         ...
    </div>
    {% endif %}

А затем просто передайте {'iframe':'iframe' in request.GET} в свой шаблон. Вуаля! Не так плохо, как я думал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...