Что делает django resol_variable? (Template.Variable) - PullRequest
1 голос
/ 15 ноября 2010

Что делает resolve_variable?И могу ли я использовать его для доступа к request вне поля зрения?


Редактировать

Так что template.Variable - правильный путь, но я все еще не уверенего цель.Документация действительно не помогает.

Приветствия, ребята.

Ответы [ 2 ]

5 голосов
/ 16 ноября 2010

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

В вашей функции компиляции вы связываете переменную следующим образом:

@register.tag
def my_tag(parser, token):
    # This version uses a regular expression to parse tag contents.
    try:
        # Splitting by None == splitting by spaces.
        tag_name, var_name = token.contents.split(None, 1)
    except ValueError:
        raise template.TemplateSyntaxError, "%r tag requires arguments" % token.contents.split()[0]
    #this will "bind" the variable in the template to the actual_var object
    actual_var = template.Variable(var_name)
    return MyNode(template_variable)


class MyNode(template.Node):
    def __init__(self, actual_var):
        self.actual_var = actual_var

    def render(self, context):
        actual_var_value = self.actual_var.resolve(context)
        #do something with it
        return result

Если вам нужен только доступ к запросу, вы привязываетесь к переменной непосредственно в узле.Убедитесь, что у вас есть запрос в контексте:

from django.template import RequestContext
def my_view(request):
    #request stuff
    return render_to_response("mytemplate.html", {'extra context': None,}, context_instance=RequestContext(request))

Затем в вашем шаблоне тег кода.

@register.tag
def simple_request_aware_tag(parser, token):
    return SimpleRequestAwareNode()

class SimpleRequestAwareNode(template.Node):
    def render(self, context):
        request = template.Variable('request').resolve(context)
        #we want to return the current username for example
        return request.user.get_full_name()
0 голосов
/ 15 ноября 2010

что делает resolve_variable делает

Разрешает переменную в теге шаблона.

Могу ли я использовать его для доступа к запросу за пределами представления

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

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