簡體   English   中英

Django:get_absolute_url 使用反向

[英]Django:get_absolute_url using reverse

NoReverseMatch at / Reverse for 'news' 未找到。 'news' 不是有效的視圖函數或模式名稱。

我正在為此創建一個新聞網站,我想通過其 slug 或 id 獲取新聞的詳細信息,但我沒有成功,並且NoReverseMatch at / Reverse for 'news' not found. 'news' is not a valid view function or pattern name.收到錯誤NoReverseMatch at / Reverse for 'news' not found. 'news' is not a valid view function or pattern name. NoReverseMatch at / Reverse for 'news' not found. 'news' is not a valid view function or pattern name.

視圖.py

from django.http import Http404
from django.shortcuts import render
from django.views.generic import ListView,DetailView
from .models import Main





class MainListView(ListView):
      queryset = Main.objects.all()
      # temp     = List.objects.all()
      template_name = "news/main_list.html"


      def get_context_data(self, *args, **kwargs):
          context = super(MainListView, self).get_context_data(*args, **kwargs)
          context['queryset'] =  Main.objects.all() 
          return context
class MainDetailSlugView(DetailView):
      queryset = Main.objects.all()
      template_name = "news/detail.html"


class HeadDetailView(DetailView):
      #queryset = Product.objects.all()
      template_name = "head/detail.html"


      def get_context_data(self, *args, **kwargs):
          context = super(ProductDetailView, self).get_context_data(*args, **kwargs)


      def get_object(self, *args, **kwargs):
          request = self.request
          pk = self.kwargs.get('pk')

         instance = Head.objects.get_by_id(pk)
         if instance is None:
            raise Http404("Product doesn't exist")  

         return instance

模型.py

import random
import os
from django.core.urlresolvers import reverse
from django.db import models
from django.urls import reverse
from django.db.models.signals import pre_save, post_save
def get_filename_ext(filepath):
    base_name = os.path.basename(filepath)
    name, ext = os.path.splitext(base_name)
    return name,ext

def upload_image_path(instence, filename):
    new_filename = random.randint(1,396548799)
    name, ext = get_filename_ext(filename)
    final_filename = '{new_filename}{ext}'.format(new_filename=new_filename, ext= ext)
   return "card/{new_filename}/{final_filename}".format(new_filename=new_filename,
    final_filename=final_filename)


class MainQuerySet(models.query.QuerySet):
      def active(self):
          return self.filter(active=True)



class MainManager(models.Manager):
      def get_queryset(self):
          return MainQuerySet(self.model, using=self._db)


      def all(self):
          return self.get_queryset().all()


class Main(models.Model):
      title      = models.CharField(max_length=120)
      slug       = models.SlugField(default=True)
      description= models.TextField()
      image      = models.ImageField(upload_to=upload_image_path,null=True, blank=True)
      active     = models.BooleanField(default=True)
      timestamp  = models.DateTimeField(auto_now_add=True)

      objects = MainManager()

      def get_absolute_url(self):
          return reverse('news', kwargs={'pk': self.pk, 'slug': self.slug })
      def __str__(self):
          return self.title


      def __unicode__(self):
          return self.title

網址.py

   from django.conf.urls import url



   from .views import(
          MainListView,
          MainDetailSlugView

   )

   urlpatterns = [
         url(r'^$',MainListView.as_view()),
         url(r'^(?P<pk>\d+)(?:/(?P<slug>[\w\d-]+))?/$',MainDetailSlugView.as_view(), name='Main'),
   ]

卡片.html

<div class="card" style="width: 30rem;">
    {% if instance.image %}
    <img class="card-img-top" src="{{ instance.image.url }}" alt="{{ instance.tile }} logo">
    </a>
    {% endif %}   
<div class="card-body">
<!--    <h5 class="card-title">{{ instance.title }}</h5> -->
<p class="card-text"><h5>{{ instance.description }}</h5></p>
<a href="{{ instance.get_absolute_url }}" class="btn btn-primary">Read more</a> 

</div>
</div>

給出一些關於通過 id 或 slug 獲取數據的想法。 謝謝幫助

代替:

  def get_absolute_url(self):
      return reverse('news', kwargs={'pk': self.pk, 'slug': self.slug })

和:

  def get_absolute_url(self):
      return reverse('Main', kwargs={'pk': self.pk, 'slug': self.slug })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM