2017-03-02 74 views
0

我正在观看一个YouTube教程,演示了如何在所述对象的详细视图的URL中使用模型对象的id,并试图应用相同的概念通过用'slug'(我的模型slug字段的名称)替换所有的'id'到slug字段。然而,这只是碰巧弹出一个错误 - 在/仪表板Django - 模型对象的Slug字段没有被应用到URL

NoReverseMatch /反向的“活动细节”与 参数“(”“)”和关键字参数‘{}’未找到。 1个图案(多个) 尝试:[ '(?I)仪表板/广告活动/(ΔP/塞[ - \ W \ d] +)/ $']

views.py:

def campaign_detail(request, campaignprofile_slug): 
    if request.user.is_authenticated: 
     campaignprofile = get_object_or_404(CampaignProfile, slug=campaignprofile_slug) 
     return render(request, 'campaign-detail.html', {'campaignprofile': campaignprofile, 'slug': slug}) 
    else: 
     return redirect('/users/login/next?=') 

urls.py:

url(r'^campaigns/(?P<slug>[-\w\d]+)/$', views.campaign_detail, name='campaign-detail') 

models.py为我想显示的模型对象:

class CampaignProfile(models.Model): 
    user = models.ForeignKey(UserModel, related_name='campaignprofile', on_delete=models.CASCADE, null=True) 
    campaign_title = models.CharField(max_length=50, verbose_name='Title') 
    slug = models.SlugField(unique=True, blank=True, null=True) 

HTML模板href标记:

<a href='{% url "campaign-detail" slug %}'></a> 

对于这个问题的任何可能的解决方案将是惊人谢谢。

+0

因此,如何'slug'在最后一个模板到达?什么是发送它? –

+1

只是一个快速提示:而不是检查每个视图,如果用户登录只使用djangos装饰@login_required ... – Jingo

+0

@DanielRoseman你是什么意思,我可以问吗?自从在我的views.py中将'slug'作为'slug = campaignprofile.slug'作为一个变量存在于我的视图中后,但是这似乎仍然引发了与之前相同的NoReverseMatch错误。 – jayt

回答

0

两件事情:

1)slug您传递在范本中的网址似乎是一个空字符串,并且你在urls.py代码不处理这会导致一个错误。

2)修复1之后,您需要使变量在urls.py的正则表达式中与查看函数中的第二个参数具有相同的名称,以防止出现其他错误。

+0

网址中的代码应该如何处理模板'slug'? – jayt

0

看起来您在返回的上下文中使用了错误的变量名称;

return render(request, 'campaign-detail.html', {'campaignprofile': campaignprofile, 'slug': slug})

重命名'slug': slug'slug': campaignprofile_slug

相关问题