Django 唯一 URL 重定向问题

Posted

技术标签:

【中文标题】Django 唯一 URL 重定向问题【英文标题】:Django unique URL redirection issue 【发布时间】:2016-01-01 16:05:39 【问题描述】:

在从提交到编辑更多字段后尝试重定向时遇到问题 还可以创建提交内容的超链接。

使用重定向提交我的表单时,我收到以下错误。 如果我将带有渲染请求的表单提交到另一个页面,则表单保存正常。

请求方法:POST请求 网址:http://127.0.0.1:8000/resourcelib/add_pricebookDjango 版本:1.8.4 异常类型:NoReverseMatch 异常值: 使用参数“()”和关键字反转“detail_pricebook” 未找到参数''p_id': 22L'。尝试了 0 个模式:[]

我的模型.py

class PriceBook(models.Model):
    pricebook_id = models.AutoField(primary_key=True)
    pricebook_name = models.CharField(max_length=255,verbose_name='PriceBook Name')
    discription = models.TextField(verbose_name='Discription')
    date_created = models.DateTimeField(auto_now_add=True, blank=True)
    active = models.SmallIntegerField(max_length=1, blank=True)

    def __unicode__(self):
        return self.pricebook_name

view.py

 def new_pricebook(request):
    if request.method == "POST":
        pricebook_form = PricebookForm(request.POST)
        if pricebook_form.is_valid():
                post = pricebook_form.save(commit=False)
                post.save()
                #return render(request, 'resourcelib/thanks.html',)
                return redirect('detail_pricebook', p_id=post.pricebook_id)

    else:
        pricebook_form = PricebookForm()
        return render(request, 'resourcelib/pricebook_add.html', 'pricebook_form': pricebook_form)

def detail_pricebook(request, p_id):
    pricebook_from = get_object_or_404(PriceBook, pk=p_id)
    return render(request, 'resourcelib/pricebook_detail.html', 'pricebook_from':pricebook_from)

url.py

url(r'^add_pricebook', views.new_pricebook, name='new_pricebook'),
    url(r'^list_pricebook', views.list_pricebook, name='list_pricebook'),
    url(r'^detail_pricebook/(?P<p_id>[0-9]+)/$', views.detail_pricebook, name='detail_pricebook'),

我不相信它在 url 文件中,因为如果我浏览到条目,例如,我不会收到任何错误。 127.0.0.1:8000/resourcelib/detail_pricebook/3/ - 工作正常

但是我的链接也无法正常工作,但我可以列出我的条目。但是,当您单击它刚刚出现的链接时,该链接将无法从下面的代码中使用 127.0.0.1:8000/resourcelib/%7B%%20url%20'detail_pricebook'%20p_id.pk%7D

% if pricebooks %
    <ul>
    % for pricebook in pricebooks %
        <li><h1><a href="% url 'detail_pricebook' p_id.pk"> pricebook.pricebook_name </a></h1></li>
    % endfor %
    </ul>
% else %
    <p>No price books have been created.</p>
% endif %
% endblock %

任何帮助将不胜感激

【问题讨论】:

缺少%。还要将模板中的p_id 替换为pricebook% url 'detail_pricebook' pricebook.pk % 【参考方案1】:

感谢@ozgur,我认为我对 pk 的引用有误。我能够解决这个问题。我在主项目 urls.py 上有一个名称空间...可能是我应该提供的信息,忘记了我使用 cookiecutter 来做这个

url(r'^resourcelib/', include('oneworksite.resourcelib.urls', namespace='resource')),

这样我就可以使用链接了

<a href="% url 'resource:detail_pricebook' pricebook.pk %"> pricebook.pricebook_name </a>

然后在我的重定向中我改为 return redirect('resource:detail_pricebook', p_id=post.pk)

【讨论】:

【参考方案2】: url 标记中缺少

%。多加小心。

【讨论】:

谢谢,我在尝试解决方案时一定错过了这一点。将其重新添加,但仍然不行错误:异常值:“detail_pricebook”的反向参数“(2L,)”和关键字参数“”未找到。尝试了 0 个模式:[] 试试这个:% url 'detail_pricebook' p_id=pricebook.pk % 感谢@hsfzxjy 整理出来,当它在不同的命名空间下时,没有意识到如何链接到我的视图

以上是关于Django 唯一 URL 重定向问题的主要内容,如果未能解决你的问题,请参考以下文章

Django 1.4 - 重定向到非 HTTP url

Django - 从斜杠重定向到非斜杠

Django 重定向到 /accounts/profile

django重定向导致重定向到下一页,但然后返回原始?

用javascript重定向django url

如果 url 模式不匹配,Django 如何重定向到 404 页面