2017-12-11 3 views
-1

이 오류가 발생하여 문제를 해결할 수 없습니다. erros image 다음NoReverseMatch at/posts/post/18/comment/Django 오류

내 view's.py : '여기

from django.shortcuts import render, get_object_or_404, redirect 
from django.contrib import messages 
from django.contrib.auth.mixins import LoginRequiredMixin 
from posts.forms import PostForm, CommentForm 

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) 



def add_comment_to_post(request, pk): 
    post = get_object_or_404(models.Post, pk=pk) 
    if request.method == "POST": 
     form = CommentForm(request.POST) 
     if form.is_valid(): 
      comment = form.save(commit=False) 
      comment.post = post 
      comment.save() 
      return redirect('posts:single', pk=post.pk) 
    else: 
     form = CommentForm() 
    return render(request, 'posts/comment_form.html', {'form': form}) 



def comment_approve(request, pk): 
    comment = get_object_or_404(Comment, pk=pk) 
    comment.approve() 
    return redirect('posts:single', pk=comment.post.pk) 



def comment_remove(request, pk): 
    comment = get_object_or_404(Comment, pk=pk) 
    post_pk = comment.post.pk 
    comment.delete() 
    return redirect('posts:single', pk=post_pk.pk) 

내 models.py입니다 : 여기 그것의 스크린 샷이다

<!DOCTYPE html> 
{%load staticfiles%} 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css"> 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous"></script> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <meta name="keywords" content="footer, address, phone, icons" /> 
    <link href="https://fonts.googleapis.com/css?family=Abel|Raleway|Signika|Signika+Negative" rel="stylesheet"> 
    <title>Ask Uptown</title> 
    <style media="screen"> 


    * { 
     margin: 0; 
     padding: 0; 
    } 


    body{ 
     font-family: 'Abel', sans-serif; 
     background-color: #E6ECF0; 
    } 

    .h12{ 
     text-align: center; 
    } 

    .hero{ 
     position: relative; 
     width: 1200px; 
     margin-left: 500px; 
     margin-top: 0; 
     top: 190px; 
    } 

    .banner{ 
     color: white; 
     font-size: 40px; 
     text-align: center; 
     position: relative; 
     top: 170px; 
     left: 125px; 
    } 

    .buttons{ 
     margin-top: 15px; 
     margin-left: 490px; 
    } 

    .btn{ 
     border: 1px solid white; 
     padding: 10px 30px; 
     color: white; 
     text-decoration: none; 
    } 

    .buttons a:hover{ 
     background-color: #cdc9c9; 
     transition: all 0.5s ease-in; 
    } 

    .about{ 
     width: 100%; 
     height: 300px; 
     color: #F4F7F8; 
    } 
    .about h1{ 
     color: black; 
     margin-top: 60px; 
     margin-left: 2px; 
     font-family: 'Signika Negative', sans-serif; 
     font-weight: 500; 
     font-size: 35px; 
    } 

    .paragraph-about{ 
     color:black; 
     font-family: 'Signika Negative', sans-serif; 
     margin-left: 70px; 
     margin-right: 60px; 
     margin-top: 30px; 
    } 

    .section{ 
     width: 100%; 
     height: 350px; 
     background-color: #F4F7F8; 
    } 


    .card-pic{ 
     background-color: #fff; 
     width: 300px; 
     height: 300px; 
     position: relative; 
     display: inline-block; 
     margin-top: 30px; 
     margin-right: 30px; 
     margin-left: 40px; 
     box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2); 
     transition: 0.3s; 
     border-radius: 10px; 
    } 

    .card-pic h4 { 
     text-align: center; 
     font-size: 25px; 
     margin-top: 20px; 
    } 

    .card-pic p{ 
     text-align: center; 
     margin-left: 20px; 
     margin-right: 12px; 
    } 


    .card-pic-two{ 
     background-color: #fff; 
     width: 300px; 
     height: 300px; 
     position: relative; 
     display: inline-block; 
     margin-left: 100px; 
     box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2); 
     transition: 0.3s; 
     border-radius: 10px; 
    } 
    .card-pic-two h4{ 
     text-align: center; 
     font-size: 25px; 
     margin-top: 20px; 
    } 

    .card-pic-two p{ 
     text-align: center; 
     margin-left: 20px; 
     margin-right: 12px; 
    } 

    .card-pic-three{ 
     background-color: #fff; 
     width: 300px; 
     height: 300px; 
     position: relative; 
     display: inline-block; 
     margin-left: 150px; 
     box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2); 
     transition: 0.3s; 
     border-radius: 10px; 
    } 
    .card-pic-three h4{ 
     text-align: center; 
     font-size: 25px; 
     margin-top: 20px; 
    } 

    .card-pic-three p{ 
     text-align: center; 
     margin-left: 20px; 
     margin-right: 12px; 
    } 

    .main-nav { 
     float: right; 
     list-style: none; 
     margin-top: 45px; 
    } 

    .main-nav li { 
     display: inline-block; 
    } 

    .main-nav li a { 
     color: white; 
     text-decoration: none; 
     padding: 5px 20px; 
     font-family: 'Signika', sans-serif; 
     font-size: 19px; 
     margin-right: 10px; 
    } 

    .main-nav li:hover a { 
     border: 1px solid white; 
    } 

    .main-nav li a:active { 
     border: 1px solid white; 
    } 


    .footer-distributed{ 
     background-color: #292c2f; 
     box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.12); 
     box-sizing: border-box; 
     width: 100%; 
     text-align: left; 
     font: bold 16px sans-serif; 

     padding: 55px 50px; 
     margin-top: 80px; 
    } 

    .footer-distributed .footer-left, 
    .footer-distributed .footer-center, 
    .footer-distributed .footer-right{ 
     display: inline-block; 
     vertical-align: top; 
    } 

    /* Footer left */ 

    .footer-distributed .footer-left{ 
     width: 40%; 
    } 

    /* The company logo */ 

    .footer-distributed h3{ 
     color: #ffffff; 
     font: normal 36px 'Cookie', cursive; 
     margin: 0; 
    } 

    .footer-distributed h3 span{ 
     color: #5383d3; 
    } 

    /* Footer links */ 

    .footer-distributed .footer-links{ 
     color: #ffffff; 
     margin: 20px 0 12px; 
     padding: 0; 
    } 

    .footer-distributed .footer-links a{ 
     display:inline-block; 
     line-height: 1.8; 
     text-decoration: none; 
     color: inherit; 
    } 

    .footer-distributed .footer-company-name{ 
     color: #8f9296; 
     font-size: 14px; 
     font-weight: normal; 
     margin: 0; 
    } 

    /* Footer Center */ 

    .footer-distributed .footer-center{ 
     width: 35%; 
    } 

    .footer-distributed .footer-center i{ 
     background-color: #33383b; 
     color: #ffffff; 
     font-size: 25px; 
     width: 38px; 
     height: 38px; 
     border-radius: 50%; 
     text-align: center; 
     line-height: 42px; 
     margin: 10px 15px; 
     vertical-align: middle; 
    } 

    .footer-distributed .footer-center i.fa-envelope{ 
     font-size: 17px; 
     line-height: 38px; 
    } 

    .footer-distributed .footer-center p{ 
     display: inline-block; 
     color: #ffffff; 
     vertical-align: middle; 
     margin:0; 
    } 

    .footer-distributed .footer-center p span{ 
     display:block; 
     font-weight: normal; 
     font-size:14px; 
     line-height:2; 
    } 

    .footer-distributed .footer-center p a{ 
     color: #5383d3; 
     text-decoration: none;; 
    } 


    /* Footer Right */ 

    .footer-distributed .footer-right{ 
     width: 20%; 
    } 

    .footer-distributed .footer-company-about{ 
     line-height: 20px; 
     color: #92999f; 
     font-size: 13px; 
     font-weight: normal; 
     margin: 0; 
    } 

    .footer-distributed .footer-company-about span{ 
     display: block; 
     color: #ffffff; 
     font-size: 14px; 
     font-weight: bold; 
     margin-bottom: 10px; 
    } 

    .footer-distributed .footer-icons{ 
     margin-top: 25px; 
    } 

    .footer-distributed .footer-icons a{ 
     display: inline-block; 
     width: 35px; 
     height: 35px; 
     cursor: pointer; 
     background-color: #33383b; 
     border-radius: 2px; 

     font-size: 20px; 
     color: #ffffff; 
     text-align: center; 
     line-height: 35px; 

     margin-right: 3px; 
     margin-bottom: 5px; 
    } 

    .footer-distributed{ 
     position: relative; 
     top: 200px; 
    } 

    /* If you don't want the footer to be responsive, remove these media queries */ 

    @media (max-width: 880px) { 

     .footer-distributed{ 
     font: bold 14px sans-serif; 
     } 

     .footer-distributed .footer-left, 
     .footer-distributed .footer-center, 
     .footer-distributed .footer-right{ 
     display: block; 
     width: 100%; 
     margin-bottom: 40px; 
     text-align: center; 
     } 

     .footer-distributed .footer-center i{ 
     margin-left: 0; 
     } 


    } 

    .twitter{ 
     width: 42px; 
     height: 42px; 
    } 


    .facebook{ 
     width: 42px; 
     height: 42px; 
    } 

    .instagram { 
     width: 40px; 
     height: 40px; 
    } 

    .icons{ 
     margin-top: 20px; 
    } 


    .adress{ 
     width: 30px; 
     height: 30px; 
     margin-right: 40px; 
    } 

    .email{ 
     width: 40px; 
     height: 40px; 
    } 

    .phone{ 
     width: 20px; 
     height: 20px; 
    } 

    .adress-sec{ 
     margin-bottom: 25px; 
    } 

    .phone-sec{ 
     margin-bottom: 20px; 
    } 

    .logo-text{ 
     color: #ffffff; 
     font: normal 36px 'Cookie', cursive; 
     margin: 0; 
     margin-top: 30px; 
     margin-left: 27px; 
     float: left; 
     text-decoration: none; 
     font-size: 27px; 
    } 

    .logo-text span{ 
     color: #5383d3; 
    } 


    .backgr{ 
     background-color: #7F7F7F; 
     height: 13vh; 
     width: 100%; 
     background-size: cover; 
     background-position: center; 
    } 



    header{ 
     background: src(.backgr); 
    } 

    .no-ans{ 
    position: relative; 
    top: 50px; 
    left: 50px; 
    font-size: 20px; 
    } 

.add-comment{ 
    position: relative; 
    text-decoration: none; 
    z-index: 99; 
    position: relative; 
    display: flex; 
    justify-content: center; 
    align-items: center; 
    width: 300px; 
    height: 40px; 
    background: linear-gradient(45deg, #B388EB, #8093F1); 
    border-radius: 20px; 
    color: #FFF; 
    font-size: 20px; 
    letter-spacing: 1px; 
    font-weight: 200; 
    left: 1100px; 
    text-decoration: none; 
    left: 800px; 
    top: 75px; 
} 
    </style> 
    </head> 
    <body> 

<header> 

<div class="backgr"> 
    <nav class="" role="navigation" id="navbar"> 
      <div class=""> 
      <div class="logo"> 
       <a class="logo-text" href="{% url 'home' %}"><h3>Uptown<span>Ask</h3></span></a> 
      </div> 


       <ul class="main-nav"> 
       {% if user.is_authenticated %} 
         <li class="active"><a href="{% url 'home' %}">Home</a></li> 
         <li><a href="{% url 'posts:create' %}">Stuck? Ask A question</a></li> 
         <li><a href="{% url 'groups:all' %}">Groups</a></li> 
         <li><a href="{% url 'posts:for_user' username=user.username %}">My Post History</a></li> 
         <li><a href="{% url 'accounts:logout' %}">Log out</a></li> 
       {% else %} 
         <li class="active"><a href="{% url 'home' %}">Home</a></li> 
         <li><a href="{% url 'groups:all' %}">Groups</a></li> 
         <li><a href="{% url 'accounts:login' %}" >Log in</a></li> 
         <li><a href="{% url 'accounts:signup' %}" >Sign up</a></li> 
         <li><a href="#">Contact</a></li> 
       {% endif %} 
       </ul> 

      </header> 

      <section> 

      {% block post_content %} 
      <div class="col-md-8"> 
       {% include "posts/_post.html" %} 
      </div> 
      {% endblock %} 

       <a class="add-comment" href="{% url 'posts:add_comment_to_post' pk=post.pk%}">Answer This Question</a> 

      </div> 


      {% for comment in post.comments.all %} 
      <br> 
       {% if user.is_authenticated or comment.approved_comment %} 

         {{ comment.created_date }} 
         {% if not comment.approved_comment %} 
          <a class="btn btn-default" href="{% url 'comment_remove' pk=comment.pk %}"><span class="glyphicon glyphicon-remove"></span></a> 
          <a class="btn btn-default" href="{% url 'comment_approve' pk=comment.pk %}"><span class="glyphicon glyphicon-ok"></span></a> 
         {% endif %} 

        <p>{{ comment.text|safe|linebreaks }}</p> 
        <p>Posted by: <strong>{{ comment.author }}</strong></p> 

       {% endif %} 
      {% empty %} 
       <p>No comments posted.</p> 
      {% endfor %} 
     </div> 




      </section> 


    <footer class="footer-distributed"> 

    <div class="footer-left"> 

    <h3>Uptown<span>Ask</span></h3> 

    <p class="footer-links"> 
    <a href="#">Home</a> 
    · 
    <a href="#">Blog</a> 
    · 
    <a href="#">About</a> 
    · 
    <a href="#">Contact</a> 
    </p> 

    <p class="footer-company-name">Ask Uptown &copy; 2017</p> 
    </div> 

    <div class="footer-center"> 

    <div class="adress-sec"> 
    <p class="p-adress">Address: Tripoli Street, Algeria Road, Mirdif Area - Dubai, United Arab Emirtes</p> 
    </div> 

    <div class="phone-sec"> 
    <p>Phone: 04 251 5001</p> 
    </div> 

    <div class="email-sec"> 
    <p class="p-email"><a href="mailto:[email protected]">Email: [email protected]</a></p> 
    </div> 

    </div> 

    <div class="footer-right"> 

    <p class="footer-company-about"> 
    <span>About the company</span> 
    Lorem ipsum dolor sit amet, consectateur adispicing elit. Fusce euismod convallis velit, eu auctor lacus vehicula sit amet. 
    </p> 

    <div class="icons"> 

    <a href="https://www.twitter.com" target="_blank"><img src="images/twitter.png" alt="Twitter" class="twitter" ></a> 
    <a href="https://www.facebook.com" target="_blank"><img src="facebook.png" alt="Facebook" class="facebook" ></a> 
    <a href="https://www.instagram.com" target="_blank"><img src="insta.png" alt="Instagram" class="instagram" ></a> 

    </div> 

    </div> 

    </footer> 
    </body> 
</html> 
:

여기
from django.conf import settings 
from django.core.urlresolvers import reverse 
from django.db import models 
from django.utils import timezone 

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 approve_comments(self): 
     return self.comments.filter(approved_comment=True) 


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



class Comment(models.Model): 
    post = models.ForeignKey('posts.Post', related_name='comments') 
    author = models.CharField(max_length=200) 
    text = models.TextField() 
    created_date = models.DateTimeField(default=timezone.now) 
    approved_comment = models.BooleanField(default=False) 

    def approve(self): 
     self.approved_comment = True 
     self.save() 

    def get_absolute_url(self): 
     return reverse("post_list") 

    def __str__(self): 
     return self.text 

내 post_detail.html입니다

django에서이 고급 오류에 대한 수정 프로그램을 찾을 수 없습니다. 아무도 도움이 PLZ 수 있습니다.

나는 그것을 풀려고했으나 할 수 없었습니다. 각 주석은 주석에 대한 링크라고 가정합니다. 당신이 pk 외에 username 인수를 전달 할 것으로 예상하기 때문에 오류를 일으킬 수

감사

return redirect('posts:single', pk=post.pk) 

+0

URL 패턴 (표시하지 않음)은'username'과'pk'를 사용하지만'redirect' 할 때'pk' 만 전달합니다. URL 패턴에서'username'을 제거하거나'redirect'로 URL을 반대로 할 때 사용자 이름을 포함시킬 수 있습니다. – Alasdair

+2

최소한 필요한만큼 게시물을 잘라주십시오. CSS를 모두 게시 할 이유는 없습니다. –

+0

아직도 알아낼 수 없으며 사용자 이름 인수를 추가했습니다. –

답변