【问题标题】:NoReverseMatch: Reverse for 'topics' with arguments '(3,)' not found. 1 pattern(s) tried: ['topics/$']NoReverseMatch:找不到带有参数“(3,)”的“主题”的反向。尝试了 1 种模式:['topics/$']
【发布时间】:2018-11-15 15:51:02
【问题描述】:

我的问题是关于再次重定向到主题的所有条目所在的 /topics/[id_number_for_topic] 页面。当我在 /edit_entry/[id_number_for_entry] 中结束条目编辑并单击按钮时,出现如下错误:

Reverse for 'topics' with arguments '(3,)' not found. 1 pattern(s) tried: ['topics/$']

这个数字 3 表示主题 ID。

我猜问题出在 views.py > edit_entry() 或正则表达式中的返回指令

我的代码:

views.py

def edit_entry(request, entry_id):
    """Edycja wpisu"""
    entry = Entry.objects.get(id=entry_id)
    topic = entry.topic
    if request.method != 'POST':
        form = EntryForm(instance=entry)
    else:
        form = EntryForm(instance=entry, data=request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('learning_logs:topics',
                                                args=[topic.id]))
    context = {'entry': entry, 'topic': topic, 'form': form}
    return render(request, 'edit_entry.html', context)

urls.py

url(r'^topics/(?P<topic_id>\d+)/$', views.topic, name='topic'),
url(r'^edit_entry/(?P<entry_id>\d+)/$', views.edit_entry, name='edit_entry'),

models.py

class Topic(models.Model):
    """Temat poznawany przez usera"""
    text = models.CharField(max_length=200)
    date_added = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        """Zwraca reprezentacje modelu w postaci ciagu text."""
        return self.text


class Entry(models.Model):
    """Konkret informacje o postepie w nauce"""
    topic = models.ForeignKey(Topic)
    text = models.TextField()
    date_added = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name_plural = 'entries'

        def __str__(self):
            return self.text[:50] + "..."

edit_entry.html

{% block content %}
<p><a href="{% url 'learning_logs:topic' topic.id %}">{{ topic }}</a></p>
<h3>Edycja wpisu:</h3>
<form action="{% url 'learning_logs:edit_entry' entry.id %}" method='post'>
    {% csrf_token %}
    {{ form.as_p }}
    <button name="submit">Zapisz zmiany</button>
</form>
{% endblock content %}

【问题讨论】:

    标签: python django


    【解决方案1】:

    这段代码有错别字。这里:

     return HttpResponseRedirect(reverse('learning_logs:topics',
                                                args=[topic.id]))
    

    应该是:

    return HttpResponseRedirect(reverse('learning_logs:topic',
                                                args=[topic.id]))
    

    【讨论】:

    【解决方案2】:

    我建议您使用django 中的reverse

    from django.urls import reverse
    ...
    return HttpResponseRedirect(reverse('learning_logs:topics', kwargs=dict(topic_id=topic.id)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-18
      • 1970-01-01
      • 1970-01-01
      • 2022-08-05
      • 1970-01-01
      • 2018-01-22
      • 2019-06-03
      • 1970-01-01
      相关资源
      最近更新 更多