【问题标题】:Django transforming an old url to new syntaxDjango 将旧 url 转换为新语法
【发布时间】:2014-09-08 18:05:51
【问题描述】:

我正在尝试在我的项目中使用这个应用程序: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})

【问题讨论】:

    标签: python django django-templates


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      URL 没有参数:

      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' %}
      

      之后,您可以使用 README 中描述的模板标签:

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

      【讨论】:

      • 我在 html 中编辑了链接的确切形式。你也可以考虑一下吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-29
      • 2019-07-16
      相关资源
      最近更新 更多