【问题标题】:How to manage slug in views.py django如何在views.py django中管理slug
【发布时间】:2020-09-18 05:36:30
【问题描述】:

我在处理 slug 时遇到了麻烦:我在管理面板中为每篇文章定义了不同的 slug,但在我的网站上,如果我在我的应用程序的任何页面上键入任何随机 slug(例如 fvrryybr、34、d4g5tg5)带我到views.py的文章功能的网页
作为Django的初学者,我不知道如何处理

____view.py___

 def article(request,slug):
    allarticles = Article.objects.all()
    context = {'allarticles':allarticles}
    return render(request,"news/Home/tnews/blog-single.html",context)

models.py

class Post(models.Model):
    no = models.CharField(max_length=1000,primary_key=True)
    title = models.CharField(max_length=100)
    content = models.TextField()
    cover = models.ImageField(upload_to='images/')
    timeStamp = models.DateTimeField(blank=True)
    slug = models.SlugField(null=False,unique=True)

    def __str__(self):
        return self.title

class Article(models.Model):
   heading = models.CharField(max_length=1000)
   player = models.CharField(max_length=100)
   article = models.TextField()
   source = models.CharField(max_length=50)
   date = models.DateTimeField(blank=True)
   image = models.ImageField(upload_to='images/')

   def __str__(self):
    return 'Article on '+ self.player

urls.py

   path("<slug:slug>",views.article,name='article')

【问题讨论】:

    标签: python django slug


    【解决方案1】:
    from django.shortcuts import get_object_or_404
    
    def article(request,slug):
        allarticles= get_object_or_404(Article, slug=slug)
        context = {'allarticles':allarticles}
        return render(request,"news/Home/tnews/blog-single.html",context)
    

    和 urls.py

       path("<str:slug>",views.article,name='article')
    

    class Article(models.Model):
       heading = models.CharField(max_length=1000)
       player = models.CharField(max_length=100)
       article = models.TextField()
       source = models.CharField(max_length=50)
       date = models.DateTimeField(blank=True)
       image = models.ImageField(upload_to='images/')
    
    
      slug = models.SlugField(unique=True)
    
    
       def __str__(self):
        return 'Article on '+ self.player
    

    【讨论】:

    • 它给出了一个字段错误无法将关键字“slug”解析到字段中。选项有:文章、日期、标题、id、图片、播放器、来源
    • 在文章类中添加 slug = models.SlugField(unique=True) 添加 models.py !!!
    【解决方案2】:

    为文章模型添加 slug

    Class Article(models.Model):
        slug = models.SlugField(unique=True)
    
    from django.shortcuts import get_object_or_404
    
    def article_detail(request, article):
        article = get_object_or_404(Model_Name, slug=article)
        context = {'article ': article}
        return render(request,"news/Home/tnews/blog-single.html",context)
    
    

    在 urls.py 中 path('&lt;slug:article&gt;/", views.article_detail, name='detail'),

    get_object_or_404是一个类似于get()函数的函数,如果存在则返回一个对象,如果不存在则返回404。

    如果要在标签的模板集 href 属性中添加链接 href="{% url 'article' article.slug %}" 另外我认为您想获取文章的详细信息,因此请像我所做的 article_detail 一样创建一个新函数并将变量传递给模板。

    【讨论】:

    • 它给出了一个错误:字段错误无法将关键字“slug”解析为字段。选项有:文章、日期、标题、id、图片、播放器、来源
    • 我遇到问题,每次我尝试访问低于 slug 的 URL 时,都不会触发低于 slug 的每个 URL 显示我找不到
    猜你喜欢
    • 2014-12-08
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 2014-02-21
    • 2010-10-24
    • 1970-01-01
    • 2011-05-19
    • 2021-01-23
    相关资源
    最近更新 更多