2016-07-09 9 views
0

Djangoを使用して投稿モデルのpost_createビューとpost_detailビューを作成しました。新しい投稿のためにslugを作って、post_listの中のある投稿をクリックした後に、post_detailにリダイレクトして、ユニークなスラッグを生成できるようにしたいと思っていました。サーバーを実行しているとき、引数 '()'とキーワード引数 '{' slug ':' '}'が見つかりません。 1つのパターンが試されました:['deal /(?P \ d +)/ $']。もし誰かがこのエラーの原因となっている可能性のあるポインタを持っていれば、私はそれを高く評価します。

views.py:

def deal(request): 
    today = timezone.now().date() 
    queryset_list = Post.objects.active() #.order_by("-timestamp") 

    if request.user.is_staff or request.user.is_superuser: 
     queryset_list = Post.objects.all() 

    query = request.GET.get("q") 

    if query: 
     queryset_list = queryset_list.filter(
       Q(from1__icontains=query)| 
       Q(type_of_truck__icontains=query)| 
       Q(Material_Name__icontains=query) | 
       Q(To__icontains=query)| 
       Q(Material_Type__icontains=query) 
       ).distinct() 

    paginator = Paginator(queryset_list, 2) # Show 25 contacts per page 
    page_request_var = "page" 
    page = request.GET.get(page_request_var) 

    try: 
     queryset = paginator.page(page) 
    except PageNotAnInteger: 
     # If page is not an integer, deliver first page. 
     queryset = paginator.page(1) 
    except EmptyPage: 
     # If page is out of range (e.g. 9999), deliver last page of results. 
     queryset = paginator.page(paginator.num_pages) 


    context = { 
     "object_list": queryset_list, 
     "from1": "List", 
     "page_request_var": page_request_var, 
     "today": today, 
    } 

    return render(request, 'before_login/deal.html', context) 

def post_create(request): 
    # if not request.user.is_staff or not request.user.is_superuser: 
    # raise Http404 

    form = PostForm(request.POST or None) 

    if form.is_valid(): 
     instance = form.save(commit=False) 
     print(form.cleaned_data.get("from1")) 
     instance.user = request.user 
     instance.save() 
     # message success 
     messages.success(request, "Successfully Created") 
     return HttpResponseRedirect(instance.get_absolute_url()) 

    context = { 
     "form": form, 
    } 
    return render(request, "loggedin_load/post_load.html", context) 

def post_detail(request, slug=None): #retrieve 
    #instance = Post.objects.get(id=1) 
    instance = get_object_or_404(Post, slug=slug) 

    if instance.date > timezone.now().date(): 
     if not request.user.is_staff or not request.user.is_superuser: 
      raise Http404 
    share_string = quote_plus(instance.Material_Type) 

    context = { 
     "from1": instance.from1, 
     "instance": instance, 
     "share_string": share_string 
    } 
    return render(request, "loggedin_load/post_detail.html", context) 

urls.py:

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

models.py:

class Post(models.Model): 

    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1) 
    from1 = models.CharField(max_length=20) 
    type_of_truck = models.CharField(max_length=20) 
    date = models.CharField(max_length=20) 
    slug = models.SlugField(unique=True) 
    weight = models.DecimalField(max_digits=5, decimal_places=2) 
    Material_Name = models.CharField(max_length=20) 
    To = models.CharField(max_length=20) 
    Number_Of_Truck = models.CharField(max_length=20) 
    Time = models.CharField(max_length=20) 
    Volume = models.CharField(max_length=20) 
    Material_Type = models.CharField(max_length=20) 
    #updated = models.DateTimeField(auto_now=True, auto_now_add=False) 
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True) 

    objects = PostManager() 

    def __unicode__(self): 
     return self.from1 

    def __str__(self): 
     return self.from1 

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

    class Meta: 
     ordering = ["-timestamp", "-Time"] 



def create_slug(instance, new_slug=None): 
    slug = slugify(instance.id) 

    if new_slug is not None: 
     slug = new_slug 

    qs = Post.objects.filter(slug=slug).order_by("-id") 
    exists = qs.exists() 

    if exists: 
     new_slug = "%s-%s" %(slug, qs.first().id) 
     return create_slug(instance, new_slug=new_slug) 
    return slug 


def pre_save_post_receiver(sender, instance, *args, **kwargs): 
    if not instance.slug: 
     instance.slug = create_slug(instance) 



    pre_save.connect(pre_save_post_receiver, sender=Post) 

deal.html:

{% for obj in object_list %} 


    <td scope="row">{{obj.date}}</td> 
    <td> <a href='{{ obj.get_absolute_url }}'>{{ obj.from1 }}</a><br/></td> 
    <td>{{obj.To}}</td> 
    <td>{{obj.Material_Type}}</td> 
    <td>{{obj.type_of_truck}}</td> 
    <td>{{obj.Number_Of_Truck}}</td> 
    <td>{{obj.weight}}</td> 
    <td>Rs. 55000</td> 
    <td><button type="button" id="bidbutton" class="btn btn-secondary fontsize align-centre bidbutton">Bid</button></td> 
</tr> 
{% endfor %} 

post_detail.html:

{% load urlify %} 

{% block head_title %} 
{{ instance.from1 }} | {{ block.super }} 
{% endblock head_title %} 



{% block content %} 
<div class='col-sm-6 col-sm-offset-3'> 

<!-- <h1>{{ title }} <small>{% if instance.draft %}<span style='color:red;'>Draft</span>{% endif %} -->{{ instance.from1 }}</small></h1> 
{% if instance.from1 %} 
<p>{{ instance.Material_Type }}</p> 
{% endif %} 

がトレースバック:

Environment: 


Request Method: GET 
Request URL: http://127.0.0.1:8000/deal/ 

Django Version: 1.9.7 
Python Version: 3.4.4 
Installed Applications: 
['personal', 
'custom_user', 
'django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'crispy_forms', 
'widget_tweaks'] 
Installed Middleware: 
['django.middleware.security.SecurityMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware'] 


Template error: 
In template C:\Users\sumanth\Desktop\django-custom-user- master\Project\mysite\personal\templates\before_login\deal.html, error at line 78 
Reverse for 'detail' with arguments '()' and keyword arguments '{'slug': ''}' not found. 1 pattern(s) tried: ['deal/(?P<slug>[\\w-]+)/$'] 68 :  <th>Best Offer</th> 
69 :  <th></th> 
70 :  </tr> 
71 : </thead> 
72 : <tbody> 
73 : <tr> 
74 : {% for obj in object_list %} 
75 : 
76 : 
77 :  <td scope="row">{{obj.date}}</td> 
78 :  <td> <a href=' {{ obj.get_absolute_url }} '>{{ obj.from1 }}</a><br/></td> 
79 :  <td>{{obj.To}}</td> 
80 :  <td>{{obj.Material_Type}}</td> 
81 :  <td>{{obj.type_of_truck}}</td> 
82 :  <td>{{obj.Number_Of_Truck}}</td> 
83 :  <td>{{obj.weight}}</td> 
84 :  <td>Rs. 55000</td> 
85 :  <td><button type="button" id="bidbutton" class="btn btn-secondary fontsize align-centre bidbutton">Bid</button></td> 
86 :  </tr> 
87 : {% endfor %} 
88 :  <!--<tr> 

トレースバック:

File "c:\python34\lib\site-packages\django\core\handlers\base.py" in get_response 
149.      response = self.process_exception_by_middleware(e, request) 

File "c:\python34\lib\site-packages\django\core\handlers\base.py" in get_response 
147.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "C:\Users\sumanth\Desktop\django-custom-user-master\Project\mysite\personal\views.py" in deal 
70.  return render(request, 'before_login/deal.html', context) 

File "c:\python34\lib\site-packages\django\shortcuts.py" in render 
67.    template_name, context, request=request, using=using) 

File "c:\python34\lib\site-packages\django\template\loader.py" in render_to_string 
97.   return template.render(context, request) 

File "c:\python34\lib\site-packages\django\template\backends\django.py" in render 
95.    return self.template.render(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in render 
206.      return self._render(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in _render 
197.   return self.nodelist.render(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in render 
992.     bit = node.render_annotated(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in render_annotated 
959.    return self.render(context) 

File "c:\python34\lib\site-packages\django\template\loader_tags.py" in render 
173.   return compiled_parent._render(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in _render 
197.   return self.nodelist.render(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in render 
992.     bit = node.render_annotated(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in render_annotated 
959.    return self.render(context) 

File "c:\python34\lib\site-packages\django\template\loader_tags.py" in render 
69.     result = block.nodelist.render(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in render 
992.     bit = node.render_annotated(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in render_annotated 
959.    return self.render(context) 

File "c:\python34\lib\site-packages\django\template\defaulttags.py" in render 
220.      nodelist.append(node.render_annotated(context)) 

File "c:\python34\lib\site-packages\django\template\base.py" in render_annotated 
959.    return self.render(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in render 
1043.    output = self.filter_expression.resolve(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in resolve 
709.     obj = self.var.resolve(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in resolve 
850.    value = self._resolve_lookup(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in _resolve_lookup 
913.        current = current() 

File "C:\Users\sumanth\Desktop\django-custom-user-master\Project\mysite\personal\models.py" in get_absolute_url 
47.   return reverse("posts:detail", kwargs={"slug": self.slug}) 

File "c:\python34\lib\site-packages\django\core\urlresolvers.py" in reverse 
600.  return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))) 

File "c:\python34\lib\site-packages\django\core\urlresolvers.py" in _reverse_with_prefix 
508.        (lookup_view_s, args, kwargs, len(patterns), patterns)) 

Exception Type: NoReverseMatch at /deal/ 
Exception Value: Reverse for 'detail' with arguments '()' and keyword arguments '{'slug': ''}' not found. 1 pattern(s) tried: ['deal/(?P<slug>[\\w-]+)/$'] 
+1

何あなたのテンプレートが見えますか? – rwx

答えて

2

エラーで別のを見てください:

Reverse for 'detail' with arguments '()' and keyword arguments '{'slug': >''}' not found. 1 pattern(s) tried: ['deal/(?P\d+)/$'].

あなたはURLを認識してください'deal/(?P\d+)/$'

このURLの名前は'detail'で、post_detail URLの前にに定義されているようです。 URLに付けた名前が一意であることを確認してください。

質問に記載されているコードは、postsアプリにあるものとします。

編集

質問は、実際のデータとトレースバックで更新された後、この編集が行われています。

Postsモデルのすべてのエントリがslugであるとは限りません。したがって、kwarg slugは空であり、reverseは失敗します。モデルのcreateメソッドが呼び出されるたびに、Postsモデルの他のフィールドに基づいてユニークなスラッグを作成するメソッドを定義できます。 (また、PostsManagerをオーバーライドする必要があります。

あなたはまた、あなたのPostsインスタンスを検索するpkの代わりslugを使用することができます。pkは、すべてのDjangoのモデルにデフォルトで提供されています。

+0

実際、私のプロジェクトではpost_list&post_detailではありません。このスレッドでの理解を深めるため、私はdealの代わりにpost_detailに変更しました。さて、私は質問の実際のエラーを変更します。それを見て、私がこのエラーを解決するのを手伝ってください。 – vanam

+0

はエラーを変更しましたか?それはどのように機能するのですか?実際のコードとエラーを投稿してください。また、あなたの質問の説明には実際のエラーがあります。(それがあるはずです) –

+0

私は実際のコードとエラーを掲載しました。それを見てみましょう。 – vanam

0

私はuが必要かどうかわからないんだけどposts:detailを指定するには、このモデルで十分である必要があります。あなたのURLはdetailとなっていますので、ちょうどdetailを試してみてください。

models.py

def get_absolute_url(self): 
    return reverse("detail", kwargs={"slug": self.slug}) 
関連する問題

 関連する問題