2014-04-21 64 views
0

我试图获取我的模型中特定项目的绝对URL。Django - 没有反向匹配/

models.py

class BannerAds(models.Model): 
    name = models.CharField(max_length=256) 
    phone = models.CharField(max_length=20) 

    def __unicode__(self): 
     return self.name 

    @permalink 
    def get_absolute_url(self): 
     from django.core.urlresolvers import reverse 
     return reverse('index', args=[str(self.name)]) 

views.py

def banners(request): 
    context = RequestContext(request) 
    all_banners = BannerAds.objects.all() 
    content_dict = {'banners': all_banners,} 
    return render_to_response('templates/banner.html', content_dict, context) 


def index(request): 
    context = RequestContext(request) 
    banner_list = BannerAds.objects.all() 
    city_list = Cities.objects.order_by('name') 
    offer_list = NewOffers.objects.order_by('offer_add_date')[:5] 
    context_dic = {'banner_list': banner_list, 
        'cities': city_list, 
        'offers': offer_list, 
        } 
    return render_to_response('templates/index.html', context_dic, context) 

urls.py

urlpatterns = patterns('', 


    url(r'^admin/', include(admin.site.urls)), 
    url(r'^$', views.index, name='index'), 
    url(r'^advertise/', views.advertise, name='advertise'), 
    url(r'^about/', views.about, name='about'), 
    url(r'^listing/', views.listing, name='listing'), 
    url(r'^search/', views.search, name='search'), 
    url(r'^add/', views.add_listing, name='add'), 
    url(r'^offers/', views.offers, name='offer'), 
    url(r'^add_listing/$', views.add_listing, name='add_listing'), 
    url(r'^listing/(?P<listing_url>\w+)/$', views.listing, name='category'), 
    url(r'^testimonial/', views.testimonials, name='testimonial'), 
    url(r'^add_testimonial', views.add_testimonial, name='add_testimonial'), 
    url(r'^banner', views.banners, name='banners'), 
) 

我已经进入测试数据如姓名=测试,手机=测试。

当我尝试打开网页,它给了我一个 Reverse for '' with arguments '('Testing',)' and keyword arguments '{}' not found. 0 pattern(s) tried: []

任何想法,我缺少的是什么沿着No Reverse Match at /错误?我对Django开发相当陌生,所以使用代码示例的解决方案将对我有所帮助。

+0

显示包含url查看的urls.py文件 –

+0

@AamirAdnan,添加urls.py – Newtt

回答

0

将视图banners更改为您正在传递参数。

def banners(request, name): 
    context = RequestContext(request) 
    all_banners = BannerAds.objects.all() 
    content_dict = {'banners': all_banners,} 
    return render_to_response('templates/banner.html', content_dict, context) 

此外,还要确保你已经在urls.py中的条目与name="banners"

+0

Sayan,我意识到我想将url传递给索引视图。所以我在上面的编辑中将'index'视图添加到'views.py'。请看看,让我知道解决方案是什么。 – Newtt

+0

您是否在视图中添加了'name'作为参数? –

+0

我应该将它添加到'def index(request,name):'对吗?我添加了它,但它给了我索引的错误需要2个参数,但只得到1。 – Newtt

0

不要同时使用@permalinkreverse()。他们做同样的事情。要么删除装饰器,要么只返回(view_name,args)的元组。

事实上,文档说永久链接已被弃用,所以最好的办法就是删除它。

0

url url(r'^$', views.index, name='index')不接受任何参数,那么为什么你在这里传递参数reverse('index', args=[str(self.name)])

如果你想有一个详细视图,并希望name成为index可选参数,那么你可以做:

url(r'^(?:(?P<name>.+?)/)?$', views.index, name='index') 

也改变了index鉴于此:

def index(request, name=None): 
    context = RequestContext(request) 
    banner_list = BannerAds.objects.all() 

    # now if name parameter is not None you may want to just pick single object 
    banner_obj = None 
    if name: 
     banner_obj = BannerAds.objects.get(name__exact=name) 

    city_list = Cities.objects.order_by('name') 
    offer_list = NewOffers.objects.order_by('offer_add_date')[:5] 
    context_dic = {'banner_list': banner_list, 
        'cities': city_list, 
        'offers': offer_list, 
        'banner_obj': banner_obj, 
        } 
    return render_to_response('templates/index.html', context_dic, context) 

还是有单独的视图将用于BannerAds的细节。