我遵循了基础民意测验指南,并且尝试对其进行修改以使其适用于子弹,但它不起作用。我从我的views.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)
Run Code Online (Sandbox Code Playgroud)
和
url(r'^(?P<article_id>[0-9]+)/$', views.detail, name='detail'),
Run Code Online (Sandbox Code Playgroud)
在我的views.py中
def detail(request, slug):
details = "blog/detail.html"
context = {
"article": get_object_or_404(Article, slug)
}
return render(request, details, context)
Run Code Online (Sandbox Code Playgroud)
和
url(r'^(?P<slug>[\w-]+)/$', views.detail, name='detail'),
Run Code Online (Sandbox Code Playgroud)
这是我的模型
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
Run Code Online (Sandbox Code Playgroud)
这是我的admin.py
from django.contrib import admin
from .models import Article
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
prepopulated_fields = {"slug": ("title",)}
Run Code Online (Sandbox Code Playgroud)
但它不起作用。我如何让sl显示在我的网址中
在您看来,您需要传递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)
Run Code Online (Sandbox Code Playgroud)
如果您Articles使用admin 进行创建,则将slug使用title字段预先填充。但是,如果要创建一个article比在admin中执行的其他操作,则需要slugify()在模型中显式调用函数save()并将其分配给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()
Run Code Online (Sandbox Code Playgroud)
注意:由于您使用slug而不是id用于detail视图,因此这意味着2篇文章不应具有相同的内容,slug即same title。unique=True在模型中添加约束以处理此问题。
| 归档时间: |
|
| 查看次数: |
5196 次 |
| 最近记录: |