Как я могу получить доступ к своим собственным переменным шаблона из собственного шаблона тегов шаблона? - PullRequest
0 голосов
/ 08 марта 2012

Я использую Django для создания сайта.

У меня есть настройка процессора контекста, которая выглядит примерно так:

 TEMPLATE_CONTEXT_PROCESSORS = (
        ...

    "mysite.context_processors.mystandardvariables"
 )

Это добавляет некоторые стандартные переменные, которые мне нравится использовать в шаблонах, такие как SITE_NAME и SITE_ROOT.

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

Я не получаю никаких ошибок, и моя страница отображается нормально, просто мне нужна переменнаянедоступно.

Чтобы проверить, какие переменные доступны, я уже использовал {% debug %}.

Мой тег выглядит так:

@register.inclusion_tag('search/search_snippet.html', takes_context = True)
def search(context):
    form = forms.SearchForm()
    return {'form': form }

Шаблон тега выглядит такэто:

<form action="{{ SITE_ROOT }}search" method="post">
    {% csrf_token  %}
    <table>
        {{ form.as_table }}
    </table>
    <input type="submit" value="Submit">
</form>

Я включил поисковый тег на своей домашней странице, например:

{% extends "base.html" %}
{% load search_tags %}

{% block content %}

{% search %}

{% endblock %}

1 Ответ

0 голосов
/ 08 марта 2012

Чтобы ответить на свой вопрос, я нашел способ сделать то, что я хочу, используя обычный шаблонный тег, а не тег включения.

@register.tag
def search(parser, token):
    return SearchNode()

class SearchNode(template.Node):
    def render(self, context):
        return render_to_string('search/search_snippet.html', 
                                 { 'form' : forms.FindForm() }, context)

Здесь я передаю контекст функции, котораярендерит мой шаблон в строку.

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

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

...