2016-04-03 17 views
0

私はモデルのオンラインショップdjangoアプリを作成していましたが、その中にスラグを組み込みたいと考えていました。ページを開く際に問題が発生しました。 これは私のモデルである:スラッグに問題がありました

from __future__ import unicode_literals 
from django.db import models 
from django.db.models.signals import pre_save 
from django.utils .text import slugify 

class Customer(models.Model): 
    customer_name = models.CharField(max_length=200) 
    slug = models.SlugField(unique = True) 
    def __str__(self): 
     return self.customer_name 

    def get_absolute_url(self): 
     return reverse("OnlineShop:order", kwargs={"slug": self.slug}) 

def pre_save_customer_receiver(sender, instance, *args, **kwargs): 
    slug = slugify(instance.customer_name) 
    exists = Customer.objects.filter(slug = slug).exists() 
    if exists: 
     slug = "%s-%s" % (slug,instance.id) 
    instance.slug=slug 

pre_save.connect(pre_save_customer_receiver, sender = Customer) 

これが私の見解です:

def customer(request): 
    customer_list = Customer.objects.all() 
    template_path = 'OnlineShop/customer.html' 
    context={ 
     'customer_list':customer_list, 
    } 
    return render(request,template_path,context) 

def order(request,slug): 
    Customer = Customer.objects.filter(slug=slug) 
    ''' some code from here ''' 

そして、私のテンプレートcustomer.html:

<h1>List of Customers:</h1> 
<ul> 
    {% for customer in customer_list %} 
     <li><a href='{% url 'order' customer.slug %}'>{{ customer.customer_name }}<br></li> 
    {% endfor %} 
</ul> 

NoReverseMatch at /OnlineShop/

これは私urls.pyです

 from django.conf.urls import url 
     from . import views 

     urlpatterns=[ 
     url(r'^$',views.customer, name='customer'), 
     url(r'^customer/(?P<slug>[\w-]+)$',views.order, name='order'), 
     ] 

テンプレートに問題がありますか?なにが問題ですか?

+0

あなたの質問を 'urls.py'で編集できますか? –

答えて

0

私は読むReverse resolution of URLsRegex for SlugField

from django.conf.urls import url, include 

from . import views 

onlineshop_patterns = [ 
    url(r'^$', views.customer, name='customer'), 
    url(r'^customer/(?P<slug>[\w-]+)$', views.order, name='order'), 
] 

urlpatterns = [ 
    # ... 
    url(r'^OnlineShop/', include(onlineshop_patterns)), 
    # ... 
] 

、あなたはurls.py以下のように定義しました願っています。

+0

テンプレートの問題について質問しているのは、テンプレートの中でcustomer.slugをcustomer.idに置き換えたときに、少なくともviews.customerが正常に呼び出されたからです。そこに私はどんなトラブルにも直面しません。テンプレートにcustomer.slugがある瞬間、問題が発生します。 – Anirban

+0

サンプルスラッグを投稿できますか? –

+0

問題を解明しました。私はURLのスラッグの正規表現を(?P [\ w - ] +)から(?P [\ w - ] *)に変更する必要がありました。投稿されました。 :) – Anirban