मैंने एक श्रेणी में सभी पोस्ट प्रदर्शित करने के लिए एक स्क्रिप्ट बनाई है, इसलिए जब मैं एकल श्रेणी को खोलने का प्रयास करता हूं तो यह पृष्ठ नहीं खोलता है और लेख पृष्ठ दिखाता है, मैंने इस कोड को बनाने के लिए एक ट्यूटोरियल का पालन किया है, लिंक है: https://www.youtube.com/watch?v=o6yYygu-vvk

Models.py

from django.db import models
from django import forms
from django.contrib.auth.models import User
from django.urls import reverse

# Categorie
class Category(models.Model):
    class Meta:
        verbose_name = 'category'
        verbose_name_plural = 'categories'

    name = models.CharField('Titolo', max_length = 250)
    slug = models.SlugField(max_length = 250, unique = True)
    desc = models.TextField('Descrizione', max_length=10000, blank=True)

    def get_absolute_url(self):
        return reverse("blog:CategoryList", args=[self.slug])


    def __str__(self):
      return self.name
# Articles
class Article(models.Model):
    class Meta:
        verbose_name = 'Articolo'
        verbose_name_plural = 'Articoli'
    '''
    Classe per creare articoli generali con media
    '''
    title = models.CharField('Titolo', max_length=100)
    author = models.ForeignKey(User, on_delete=models.CASCADE,)
    category = models.ForeignKey (Category, on_delete=models.CASCADE)
    desc = models.CharField('Descrizione', max_length=10000, blank=True)
    text = models.TextField('Testo', max_length=10000, blank=True)
    image = models.ImageField('Foto', blank=True, upload_to="img")
    data = models.DateTimeField('Data di pubblicazione', blank=True)
    slug = models.SlugField(max_length = 250, null = True, blank = True, unique=True)

    class Meta: # Order post by date
        ordering = ['-data',]

    def __str__(self):
       return "Crea un nuovo articolo"

views.py

from django.shortcuts import render, get_object_or_404
from django.shortcuts import render
from django.http import HttpResponse
from .models import *
from django.views.generic import View
from django.views import generic


def index(request): # HomePage
   articles = Article.objects.all().order_by('-data')[0:3] # Show last 3 articles
   return render(request, 'blog/index.php', {'articles':articles})

# Post

def PostList(request): # Articles List
  articles = Article.objects.all().order_by('-data')
  return render(request, 'blog/post/PostList.php',{'articles':articles})

class PostDetail(generic.DetailView): #Single Article
   model = Article
   template_name = 'blog/post/post_detail.php'

# Category

def Categories(request): # Category List
  categories = Category.objects.all()
  return render(request, 'blog/category/category.php',{'categories':categories})

def CategoryList(request, slug): # Show post by category
  categories = Category.objects.all()
  articles = Article.objects.all()
  if slug:
     category = get_object_or_404(Category, slug=slug)
     articles = articles.filter(category=slug)

  template = 'blog/category/single_category.php'
  context = {'categories':categories, 'articles':articles, 'category': category}

  return render(request, template, context)

Urls.py

from django.conf.urls import url
from . import views
from django.contrib import admin
from django.views.generic import ListView, DetailView
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf import settings
from django.conf.urls.static import static
from django.urls import path

urlpatterns = [
  url(r'^admin/', admin.site.urls),
  url(r'^$', views.index, name='index'), # Index
  url(r'^all-articles$', views.PostList, name='PostList'), # All Posts
  url(r'^category', views.Categories, name='category'), # All Category
  url('<slug: slug>/', views.CategoryList, name='category_list'), # Show post by category
  path('<slug:slug>/', views.PostDetail.as_view(), name='post_detail'), # Single Posts

]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

urlpatterns += staticfiles_urlpatterns()

post_detail.php

{% extends 'blog/layout.php' %} <!-- Import Content -->
{% block content %} <!-- Start Content -->
<!-- Articles -->
  <div class="article">
    {% if article.image %}
      <img src="{{article.image.url}}" alt="" class="">
    {% endif %}
    <div class="article__text">
       <h1>{% block title %} {{ object.title }} {% endblock title %}</h1>
       <p class="article_info"> Scritto da <a href="#">{{ article.author }}</a> il {{ 
article.data }}</p>
       <p class=" article_desc">{{ article.desc }}</p>
       <p class=" article_content">{{ article.text }}</p>
       <p class=" article_category">category: <a href="{{ articles.category.get_absolute_url 
}}">
         {{ article.category }}</a></p>
    </div>
</div>
{% endblock content %}

single_category.php

{% extends 'blog/layout.php' %} <!-- Import Content -->
<!-- Content -->
{% block content %}
 <h1>{{ category.name }}</h1>
 {% for article in articles %}
 <!--CARDS -->
   <section class="cards"clearfix> <a href="{% url 'post_detail' article.slug  %}">
    <div class="card">
      {% if article.image %}
      <img src="{{article.image.url}}" alt="" class="card__img">
      {% endif %}
       <div class="card__txt">
        <h3 class="card__title">{{article.title}}</h3>
        <p class="date__article"> by {{article.author}}</p>
        <p class="card__text">{{article.desc}}</p>
       </div>
    </div>
   </a>
   </section>
   {% endfor  %}
  {% endblock %}
0
Leonardo - Sinistra Unita 13 सितंबर 2019, 21:47

1 उत्तर

सबसे बढ़िया उत्तर

श्रेणी के यूआरएल को वापस करने के लिए आपका कार्य गलत है क्योंकि "श्रेणी सूची" का नाम मौजूद नहीं है

class Category():
#---- your properties definition

def get_absolute_url(self):
    #bad return reverse("blog:CategoryList", args=[self.slug])
    return reverse("blog:category_list", args=[self.slug])

आपके urls.py . में

  url('<slug: slug>/', views.CategoryList, name='category_list'), # Show post by category

category_list को आपके url में नाम के रूप में परिभाषित किया गया है, ~CategoryList~ नहीं

और आप पोस्ट और कैटेगरी लिस्ट के लिए एक ही यूआरएल का इस्तेमाल करते हैं

url('<slug: slug>/', views.CategoryList, name='category_list'), # Show post by category
path('<slug:slug>/', views.PostDetail.as_view(), name='post_detail'), 

और आप url और path को एक ही परिभाषा में मिला रहे हैं। तो, आप शायद django 2.x का उपयोग कर रहे हैं और django 1.x ट्यूटोरियल पढ़ें।

एक और विचार (कि देवों पर टिप्पणी की गई थी) ... एचटीएमएल फाइलों का विस्तार PHP के रूप में अच्छा नहीं है, PHP एक "प्रोग्राम भाषा" है और एचटीएमएल एक और चीज है ... लेकिन, आप किसी भी एक्सटेंशन का उपयोग कर सकते हैं ...

0
kaajavi 13 सितंबर 2019, 23:13