我该如何让蛞蝓在django工作

  • 本文关键字:django 工作 django
  • 更新时间 :
  • 英文 :


我遵循了基本的民意测验教程,并试图对其进行修改,使其适用于蛞蝓,但它不起作用。我从我的观点出发.py

def detail(request, article_id):
    details = "blog/detail.html"
    context = {
        "article": get_object_or_404(Article, pk=article_id)
    }
    return render(request, details, context)

url(r'^(?P<article_id>[0-9]+)/$', views.detail, name='detail'),

在我看来。py

def detail(request, slug):
    details = "blog/detail.html"
    context = {
        "article": get_object_or_404(Article, slug)
    }
    return render(request, details, context)

url(r'^(?P<slug>[w-]+)/$', views.detail, name='detail'),

这是我的型号.py

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

class Article(models.Model):
    author = models.ForeignKey(User)
    title = models.CharField(max_length=250)
    slug = models.SlugField()
    body = models.TextField()
    created = models.DateTimeField(auto_now=True)
    def __str__(self):
        return self.title

这是我的管理员.py

from django.contrib import admin
from .models import Article

@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
    prepopulated_fields = {"slug": ("title",)}

但它不起作用。如何在我的url 中显示slugs

在视图中,需要传递slug参数。

def detail(request, slug):
    details = "blog/detail.html"
    context = {
        "article": get_object_or_404(Article, slug=slug) # pass slug 
    }
    return render(request, details, context)

如果使用admin创建Articles,则slug将使用title字段进行预填充。但是,如果您想创建一个article,而不是在管理中创建,则需要在模型的save()中显式调用slugify()函数,并在保存之前将其分配给article对象。

你可以做一些类似的事情:

class Article(models.Model):
    def save(self, *args, **kwargs):
        self.slug = slugify(self.title) # set the slug explicitly
        super(Article, self).save(*args, **kwargs) # call Django's save()

注意:由于detail视图使用的是slug而不是id,这意味着没有两篇文章应该具有相同的slug,即相同的title。在模型中添加unique=True约束来处理此问题。

get_object_or_404中缺少参数名称。假设您的Article模型有一个名为slug:的SlugField

get_object_or_404(Article, slug=slug)

编辑:用户更新提供模型的问题。不再需要此部件。

由于您没有发布您的Article模型,我将提供一个示例,说明您应该如何对其进行编码,使其与我的示例兼容:

from django.utils.text import slugify
from django.db import models
class Article(models.model):
    #…
    slug = models.SlugField(unique=True)
    def save(self, *args, **kwargs):
        self.slug = slugify(self.slug)
        super(Article, self).save(*args, **kwargs)

复制自此答案。请注意我们是如何重写save方法来自动生成段塞的根据您的体系结构,这可能不是一个好主意。我建议在视图或模型形式中调用slugify,如本教程中所述。

最新更新