2017-09-14 3 views
0

Je continue d'obtenir cette erreur dans django: NoReverseMatc, et je ne peux pas comprendre pourquoi.

mon 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"] 

mon 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) 

et mon urls.py est ceci:

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"), 
] 

mon _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>

J'ai une autre application appelée dans mon projet « questions », et il utilise presque les phrases alors peut-être que le problème est, mais je ne suis pas sûr .

+0

S'il vous plaît montrer le fichier urls.py – deaspo

+0

S'il vous plaît préciser ce que vous entendez par « il utilise presque les expressions » . – mech

+0

On dirait que quelque chose manque ici, il a des problèmes pour trouver l'inverse pour user_posts, mais je ne vois aucune référence aux user_posts dans le template (seulement for_user et single). –

Répondre

0

Dans votre url user_posts vous devez également passer username, faites-le en définissant 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

Merci pour la réponse mais je ne l'ai toujours pas compris pouvez-vous me montrer un exemple s'il vous plaît? –

+0

Ça ne marche pas? Ou vous avez juste besoin de comprendre ce qui se passe. –

+0

son ne fonctionne pas, j'ai essayé de l'ajouter à mon fichier views.py sous la vue Userposts et il n'a pas travaillé a toujours une erreur, je ne sais pas non plus ce qui est hapenning wiith chose url de succès. –