Поиск того, как передать функцию Reverse для Django View - PullRequest
1 голос
/ 18 декабря 2011

Я застрял, пытаясь выяснить, как передать "view_category", представление, которое можно вставить в этот тег шаблона (из djangosnippets). Кроме того, как должен выглядеть urls.py для этого представления / тега?

Источник (http://djangosnippets.org/snippets/475/#c4123):

from django.core.urlresolvers import reverse, NoReverseMatch
from django.template import Library, Variable, TemplateSyntaxError, Node

register = Library()

class RelatedNode(Node):
    def __init__(self, object_list, viewname):
        self.object_list = Variable(object_list)
        self.viewname = viewname

    def render(self, context):
        def node(object):
            try:
                reversed = reverse(self.viewname, args=[object.id])
            except NoReverseMatch:
                return '<li>%s</li>' % object

            return '<li><a href="%s">%s</li>' % (reversed, object)

        def recursive(object):
            if object.child_set.all():
                output.append('<ul>')
                for object in object.child_set.all():
                    output.append(node(object))
                    recursive(object)
                output.append('</ul>')

        output = []
        for object in self.object_list.resolve(context):
            if not object.parent:
                output.append(node(object))
                recursive(object)

        return '\n'.join(output)

def related_linked_list(parser, token):
    bits = token.contents.split()
    if len(bits) != 3:
        raise TemplateSyntaxError, "'%s' tag takes exactly 2 arguments" % bits[0]
    return RelatedNode(bits[1], bits[2])

register.tag(related_linked_list)

1 Ответ

0 голосов
/ 18 декабря 2011

В вашем url conf:

url(r'^some-category/(\d+)/$', some_category_view, name="my-category-view")

Для вашего тега view_category == "my-category-view"

... Так что в конечном итоге обратный вызов:

reversed = reverse("my-category-view", args=[object.id])

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