Django将旧网址转换为新语法

时间:2014-09-08 18:05:51

标签: python django django-templates

我正在尝试在我的项目中使用此应用:https://github.com/s1n4/django-favorite 但它有旧的url语法,我不明白如何将其转换为新的url语法。 我想改变的网址:

{% url favorite.views.add_or_remove target_model target_object_id %}

在html中的确切形式:

<button class="btn favorite" href="{% url 'favorite.views.add_or_remove' %}" model="{{ target_model }}" id="target_{{ target_object_id }}">

我知道Django 1.5的语法已经改变,我尝试使用这个版本:

{% url 'favorite.views.add_or_remove' target_model target_object_id %}

它也没用。 它说:

Reverse for 'favorite.views.add_or_remove' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

我该如何解决这个问题?感谢。

编辑: 它的模板标签有助于理解:

@register.simple_tag(takes_context=True)
def favorite_button(context, target):
    user = context['request'].user

    # do nothing when user isn't authenticated
    if not user.is_authenticated():
        return ''

    target_model = '.'.join((target._meta.app_label, target._meta.object_name))
    target_content_type = ContentType.objects.get_for_model(target)
    target_object_id = target.id
    fav_count = Favorite.objects.filter(target_content_type=target_content_type,
                                        target_object_id=target_object_id).count()
    undo = False
    if user.favorite_set.filter(target_content_type=target_content_type,
                                target_object_id=target_object_id):
        undo = True

    return render_to_string('favorite/button.html',
                            {'target_model': target_model, 'target_object_id': target_object_id,
                             'fav_count': fav_count, 'undo': undo})

2 个答案:

答案 0 :(得分:2)

网址没有参数:

url(r'^add-or-remove$', 'add_or_remove'),

并且都没有看到:

def add_or_remove(request):

HTML中的URL标记也没有参数:

{% url favorite.views.add_or_remove %}

要将其转换为新语法,它将是:

{% url 'favorite.views.add_or_remove' %}

之后,您可以使用自述文件中描述的模板标记:

{% load favorite_tags %}

{% for comment in post.comments %}
  {% favorite_button comment %}
{% endfor %}

答案 1 :(得分:2)

由于该应用程序正在生产中使用(我们使用Django 1.4),我无法修补应用程序以使其与Django 1.5+兼容。但是有一个拉动请求,我为这种情况保持开放。这是:https://github.com/s1n4/django-favorite/pull/1它可以解决问题。