找不到/ posts /处的NoReverseMatch,反向查找带有关键字参数'{'id':1}'的'detail'。尝试了1个模式:['posts /(?P <slug> [^ /] +)/ $']

时间:2019-02-24 12:00:17

标签: python django

我想在帖子详细信息中使用slug作为url。但这给我这样的错误 。它说当我的数据库为空时,错误被发布到posts.view.detail。但是在管理界面中添加了几条帖子后,我得到了类似这样的错误

这是怎么了?

  

/ posts /中的NoReverseMatch   找不到带有关键字参数'{'id':1}'的'detail'。尝试了1个模式:['posts /(?P [^ /] +)/ $']

     

posts / models.py

BaseResponse<PaginateResponse<BuiltList<Deliveries>>>
  

posts / urls.py

from django.db import models
from django.urls import reverse
from django.db.models.signals import pre_save
from django.utils.text import slugify
# Create your models here.

def upload_location(instance, filename):
    #filebase, extension = filename.split(".")
    # return "%s/%s.%s" %(instance.id,instance.id, extension)
    return "%s/%s" %(instance.id, filename)

class Post(models.Model):
    title = models.CharField(max_length= 120)
    slug = models.SlugField(unique=True)
    image = models.ImageField(upload_to=upload_location, 
    null=True, 
    blank = True, 
    width_field="width_field", 
    height_field="height_field")
    height_field = models.IntegerField(default=0)
    width_field = models.IntegerField(default=0)
    content = models.TextField()
    updated = models.DateTimeField(auto_now=True, auto_now_add=False)
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)


    def __unicode__(self):
        return self.title 

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse("posts:detail", kwargs={"slug": self.slug})
        #return "/posts/%s/" %(self.id)
    class Meta: 
        ordering: ["-timestamp", "-updated"]
def create_slug(instance, new_slug=None):
    slug = slugify(instance.title)
    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)
  

posts / view.py

from django.urls import path
from .views import (
    posts_create,
    posts_delete,
    posts_detail,
    posts_list,
    posts_update
    )

app_name = "posts"

urlpatterns = [
    path("", posts_list, name="list"),
    path("<slug>/", posts_detail, name="detail"),
    path("create/", posts_create, name="create"),
    path("<slug>/edit/", posts_update, name="update"),
    path("<slug:slug>/delete/", posts_delete, name="delete"),

]
  

templates / post_detail.html

def posts_detail(request, slug=None):
    #instance = Post.objects.get(id=1)
    instance = get_object_or_404(Post, slug=slug)
    context = {
        "title": instance.title,
        "instance": instance
    }
    return render(request, "post_detail.html", context)

def posts_list(request):
    queryset_list = Post.objects.all()
    paginator = Paginator(queryset_list, 5)
    page_request_var= "page"
    page = request.GET.get(page_request_var)
    try: 
        queryset = paginator.page(page)
    except PageNotAnInteger:
        queryset = paginator.page(1)
    except EmptyPage: 
        queryset = paginator.page(paginator.num_pages)

    #contacts = paginator.get_page(page)
    context = {
        "object_list": queryset,
        "title": "List",
        "page_request_var": page_request_var
    }
    return render(request, "post_list.html", context)
  

post_list.html

{%extends 'base.html' %}
{% block head %} {{instance.title}} {%endblock head %}
{% block content %}
<div class="col-sm-6 col-sm-offset-3">
    {% if instance.image %}
    <img src="{{instance.image.url}}" class="img-responsive"/>
    {% endif %}
<h1>{{title}}<small>{{instance.timestamp}}</small></h1>
    {{instance.content}}<br/>
</div>
{%endblock content %}

0 个答案:

没有答案
相关问题