【问题标题】:How add categories in my website with django?如何使用 django 在我的网站中添加类别?
【发布时间】:2021-08-05 02:32:45
【问题描述】:

我是 django 的初学者,我正在尝试制作一个网站。 我想过滤网站中的类别,但在浏览器中引入 URL 时出现错误 (UnboundLocalError)。

models.py

from django.db import models
from django.contrib.auth.models import User

class Categoria(models.Model):
    nombre=models.CharField(max_length=50)
    created=models.DateTimeField(auto_now_add=True)
    updated=models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name='categoria'
        verbose_name_plural='categorias'

    def __str__(self):
        return self.nombre

class Post(models.Model):
    titulo=models.CharField(max_length=50)
    contenido=models.TextField()
    imagen=models.ImageField(upload_to='blog', null=True, blank=True)
    autor=models.ForeignKey(User, on_delete=models.CASCADE)
    categorias=models.ManyToManyField(Categoria)
    created=models.DateTimeField(auto_now_add=True)
    updated=models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name='post'
        verbose_name_plural='posts'

    def __str__(self):
        return self.titulo

urls.py

from django.urls import path
from . import views


urlpatterns = [

     path('',views.blog, name='Blog'),
     path('categoria/<int:categoria_id>/', views.categoria, name='categoria'),
]

views.py

from django.shortcuts import get_object_or_404, render
from blog.models import Categoria, Post


def blog(request):
    posts=Post.objects.all()
    return render(request, 'blog/blog.html', {'posts':posts})

def categoria(request, categoria_id):
    categoria=get_object_or_404(Categoria, id=categoria_id)
    return render(request, 'blog/categorias.html', {'categoria':categoria, 'posts':posts})

blog.html

{% extends 'ProyectoWebApp/base.html' %}
{% load static %}
{% block content %}
{% for post in posts %}
    <div class="intro">
      <img class="intro-img img-fluid mb-3 mb-lg-0 rounded" src="{{post.imagen.url}}" alt="" style="width: 50%;">
      <div class="intro-text left-0 text-center bg-faded p-5 rounded">
        <h2 class="section-heading mb-4" >
          <span class="section-heading-lower">{{post.titulo}}</span>
          <span class="section-heading-upper">{{post.contenido}}</span>
        </h2>   

        <div style="text-align: left; font-size: 0.8em;">
           
           Autor: {{post.autor}}
        
        </div>        
     </div>
    </div>

  </div>
</section>


{% endfor %}
  <div style="width: 75%; margin: auto; text-align: center; color: white;">
  
  
     Categorias:

     {% for post in posts %}

        {% for categoria in post.categorias.all %}

           {{categoria.nombre}} &nbsp;&nbsp;&nbsp;

        {% endfor %}
     {% endfor %}
  </div>

在过滤类别时,我创建了完全相同的“blog.html”副本,但我不知道如何制定循环,以便类别通过并显示而不显示错误。也许,这就是问题所在。如果有人可以帮助我,我将不胜感激。

【问题讨论】:

  • 您忘记过滤类别为categoria 的帖子并将其分配给posts。
  • (具体来说,posts = categoria.post_set.all())
  • @Jasmijn 你的解决方案很有帮助.. 非常感谢

标签: python django unbound


【解决方案1】:

如果在分配局部变量之前引用了局部变量,则会引发 UnboundLocalError categoria':categoria, 'posts':posts}) 更新您的方法如下:

def categoria(request, categoria_id):
    categoria=get_object_or_404(Categoria, id=categoria_id)
    posts=Post.objects.all()
    return render(request, 'blog/categorias.html', {'categoria':categoria, 'posts':posts})

【讨论】:

    【解决方案2】:

    在您的类别视图中:

     return render(request, 'blog/categorias.html', {'categoria':categoria, 'posts':posts})
    

    上下文'posts':posts不是来自任何地方,所以Django抛出错误UnboundLocalError,你可能想做类似的事情:

    def categoria(request, categoria_id):
      categoria=get_object_or_404(Categoria, id=categoria_id)
      posts = Post.objects.filter(categoria__in=categoria)
      return render(request, 'blog/categorias.html', {'categoria':categoria, 'posts':posts})
    

    这样您就可以显示一个类别以及该类别的所有帖子

    【讨论】:

      猜你喜欢
      • 2016-10-27
      • 2021-02-02
      • 2020-11-20
      • 2022-08-03
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      • 2020-04-18
      • 2018-05-12
      相关资源
      最近更新 更多