2017-09-14 5 views
0

私はdjangoでこのエラーが発生し続ける:NoReverseMatc、私は理由を理解できません。

私のmodels.py:

from django.conf import settings 
from django.core.urlresolvers import reverse 
from django.db import models 

import misaka 

from groups.models import Group  
from django.contrib.auth import get_user_model 
User = get_user_model() 

class Post(models.Model): 
    user = models.ForeignKey(User, related_name="posts") 
    created_at = models.DateTimeField(auto_now=True) 
    message = models.TextField() 
    message_html = models.TextField(editable=False) 
    group = models.ForeignKey(Group, related_name="posts",null=True, blank=True) 

    def __str__(self): 
     return self.message 

    def save(self, *args, **kwargs): 
     self.message_html = misaka.html(self.message) 
     super().save(*args, **kwargs) 

    def get_absolute_url(self): 
     return reverse(
      "posts:single", 
      kwargs={"username": self.user.username,"pk": self.pk}) 


    class Meta: 
     ordering = ["-created_at"] 
     unique_together = ["user", "message"] 

私のviews.py:

from django.contrib import messages 
from django.contrib.auth.mixins import LoginRequiredMixin 

from django.core.urlresolvers import reverse_lazy 
from django.http import Http404 
from django.views import generic 

from braces.views import SelectRelatedMixin 

from . import forms 
from . import models 

from django.contrib.auth import get_user_model 
User = get_user_model() 

class PostList(SelectRelatedMixin, generic.ListView): 
    model = models.Post 
    select_related = ("user", "group") 


class UserPosts(generic.ListView): 
    model = models.Post 
    template_name = "posts/user_post_list.html" 

    def get_queryset(self): 
     try: 
      self.post_user = User.objects.prefetch_related("posts").get(
       username__iexact=self.kwargs.get("username") 
      ) 
     except User.DoesNotExist: 
      raise Http404 
     else: 
      return self.post_user.posts.all() 

    def get_context_data(self, **kwargs): 
     context = super().get_context_data(**kwargs) 
     context["post_user"] = self.post_user 
     return context 


class PostDetail(SelectRelatedMixin, generic.DetailView): 
    model = models.Post 
    select_related = ("user", "group") 

    def get_queryset(self): 
     queryset = super().get_queryset() 
     return queryset.filter(
      user__username__iexact=self.kwargs.get("username") 
     ) 


class CreatePost(LoginRequiredMixin, SelectRelatedMixin, generic.CreateView): 
    # form_class = forms.PostForm 
    fields = ('message','group') 
    model = models.Post 

    # def get_form_kwargs(self): 
    #  kwargs = super().get_form_kwargs() 
    #  kwargs.update({"user": self.request.user}) 
    #  return kwargs 

    def form_valid(self, form): 
     self.object = form.save(commit=False) 
     self.object.user = self.request.user 
     self.object.save() 
     return super().form_valid(form) 


class DeletePost(LoginRequiredMixin, SelectRelatedMixin, generic.DeleteView): 
    model = models.Post 
    select_related = ("user", "group") 
    success_url = reverse_lazy("posts:all") 

    def get_queryset(self): 
     queryset = super().get_queryset() 
     return queryset.filter(user_id=self.request.user.id) 

    def delete(self, *args, **kwargs): 
     messages.success(self.request, "Post Deleted") 
     return super().delete(*args, **kwargs) 

私urls.pyはこれです:

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

app_name='posts' 

urlpatterns = [ 
    url(r"^$", views.PostList.as_view(), name="all"), 
    url(r"new/$", views.CreatePost.as_view(), name="create"), 
    url(r"by/(?P<username>[-\w]+)/$",views.UserPosts.as_view(),name="user_posts"), 
    url(r"by/(?P<username>[-\w]+)/(?P<pk>\d+)/$",views.PostDetail.as_view(),name="single"), 
    url(r"delete/(?P<pk>\d+)/$",views.DeletePost.as_view(),name="delete"), 
] 

私_post.html

<div class="post media"> 
 
    <h3>{{ post.message_html|safe }}</h3> 
 
    <div class="media-body"> 
 
     <strong>{{ post.user.username }}</strong> 
 
     <h5 class="media-heading"> 
 
      <span class="username"><a href="{% url 'posts:for_user' username=post.user.username %}">@{{ post.user.username }}</a></span> 
 
      <time class="time"><a href="{% url 'posts:single' username=post.user.username pk=post.pk %}">{{ post.created_at }}</a></time> 
 
      {% if post.group %} 
 
      <span class="group-name">in <a href="#">{{ post.group.name }}</a></span> 
 
      {% endif %} 
 
     </h5> 
 

 
     <div class="media-footer"> 
 
      {% if user.is_authenticated and post.user == user and not hide_delete %} 
 
       <a href="{% url 'posts:delete' pk=post.pk %}" title="delete" class="btn btn-simple"> 
 
        <span class="glyphicon glyphicon-remove text-danger" aria-hidden="true"></span> 
 
        <span class="text-danger icon-label">Delete</span> 
 
       </a> 
 
      {% endif %} 
 
     </div> 
 
    </div> 
 
</div>

私は私のプロジェクトに「質問」と呼ばれる別のアプリケーションを持っている、そしてそれはほとんどの句を使用していますので、多分それが問題だが、私はよく分かりません。あなたもusernameを渡す必要があなたのuser_posts URLで

+0

を定義することによって、それを行うurls.pyファイル – deaspo

+0

あなたは「それはほとんどの句を使用しています」によって何を意味するかを拡張してくださいをご提示ください。 – mech

+0

ここで何かが見つからないように見えますが、それはuser_postsの逆を見つけるのに問題がありますが、テンプレートのuser_postsへの参照は表示されません(for_userとsingleのみ)。 –

答えて

0

は、success_url

from django.views.generic import ListView 

class UserPosts(ListView): 
    model = models.Post 
    template_name = "posts/user_post_list.html" 

    def get_queryset(self): 
     .. . . 

    def get_context_data(self, **kwargs): 
     . . . . 

    def get_success_url(self): 
     username = self.kwargs['username'] 
     return reverse('user_posts', kwargs={'username': username}) 
+0

答えをありがとうが、私はまだそれを得ることができなかったあなたは私に例を示すことができますか? –

+0

動作していませんか?あるいは、何が起こっているのかを理解するだけです。 –

+0

それは働いていない、私はUserpostsビューの下に私のviews.pyファイルにそれを追加しようとしましたが、それはまだ仕事をしていない、私はまた、何を取得wiith成功URLの事を取得しないでください。 –

関連する問題