장고에 민달팽이 어떻게 만들어요?
작성하려고 합니다.SlugField
장고에서.
저는 다음과 같은 간단한 모델을 만들었습니다.
from django.db import models
class Test(models.Model):
q = models.CharField(max_length=30)
s = models.SlugField()
그러면 이렇게 하겠습니다.
>>> from mysite.books.models import Test
>>> t=Test(q="aa a a a", s="b b b b")
>>> t.s
'b b b b'
>>> t.save()
>>> t.s
'b b b b'
기대했었는데b-b-b-b
.
슬러피라이즈 기능을 사용해야 합니다.
>>> from django.template.defaultfilters import slugify
>>> slugify("b b b b")
u'b-b-b-b'
>>>
전화하시면 됩니다.slugify
를 덮어쓰면 자동으로save
방법:
class Test(models.Model):
q = models.CharField(max_length=30)
s = models.SlugField()
def save(self, *args, **kwargs):
self.s = slugify(self.q)
super(Test, self).save(*args, **kwargs)
위의 내용에 따라 URL이 변경될 수 있습니다.q
필드가 편집되어 링크가 끊어질 수 있습니다.새 개체를 만들 때 슬래그를 한 번만 생성하는 것이 좋습니다.
class Test(models.Model):
q = models.CharField(max_length=30)
s = models.SlugField()
def save(self, *args, **kwargs):
if not self.id:
# Newly created object, so set slug
self.s = slugify(self.q)
super(Test, self).save(*args, **kwargs)
utf-8 문자가 포함된 모서리 케이스가 있습니다.
예:
>>> from django.template.defaultfilters import slugify
>>> slugify(u"test ąęśćółń")
u'test-aescon' # there is no "l"
이 문제는 Unidecode로 해결할 수 있습니다.
>>> from unidecode import unidecode
>>> from django.template.defaultfilters import slugify
>>> slugify(unidecode(u"test ąęśćółń"))
u'test-aescoln'
Thepeer의 답변에 대한 약간의 수정 사항:덮어쓰다save()
모델 클래스의 함수, 인수를 추가하는 것이 좋습니다.
from django.utils.text import slugify
def save(self, *args, **kwargs):
if not self.id:
self.s = slugify(self.q)
super(test, self).save(*args, **kwargs)
그렇지않으면,test.objects.create(q="blah blah blah")
결과적으로force_insert
error(예상하지 않은 인수).
관리 인터페이스를 사용하여 모델의 새 항목을 추가하는 경우ModelAdmin
당신의 안에서admin.py
를 사용하여 슬래그 입력을 자동화합니다.
class ClientAdmin(admin.ModelAdmin):
prepopulated_fields = {'slug': ('name',)}
admin.site.register(Client, ClientAdmin)
여기서 사용자가 admin 폼에 값을 입력하면name
필드,slug
자동으로 올바른 슬러티라이즈로 채워집니다.name
.
대부분의 경우 슬러그는 변화하지 않아야 하므로 첫 번째 저장 시에만 계산해야 합니다.
class Test(models.Model):
q = models.CharField(max_length=30)
s = models.SlugField(editable=False) # hide from admin
def save(self):
if not self.id:
self.s = slugify(self.q)
super(Test, self).save()
slugfield를 Not be editable로 설정하지 않으려면 Null 및 Blank 속성을 False로 설정해야 합니다.그렇지 않으면 Admin에 저장하려고 할 때 오류가 발생합니다.
따라서 위의 예에 대한 변경은 다음과 같습니다.
class test(models.Model):
q = models.CharField(max_length=30)
s = models.SlugField(null=True, blank=True) # Allow blank submission in admin.
def save(self):
if not self.id:
self.s = slugify(self.q)
super(test, self).save()
관리자 클래스에서 사용:
class ArticleAdmin(admin.ModelAdmin):
prepopulated_fields = {"slug": ("title",)}
admin.site.register(Article, ArticleAdmin)
저는 장고 1.7을 쓰고 있어요.
모델에 다음과 같이 SlugField를 만듭니다.
slug = models.SlugField()
그럼 인admin.py
정의하다prepopulated_fields
;
class ArticleAdmin(admin.ModelAdmin):
prepopulated_fields = {"slug": ("title",)}
언급URL : https://stackoverflow.com/questions/837828/how-do-i-create-a-slug-in-django
'sourcecode' 카테고리의 다른 글
마리아답의 직업.제어 프로세스가 오류 코드와 함께 종료되었기 때문에 서비스가 실패했습니다. (0) | 2022.09.15 |
---|---|
왜 MariaDBB는 smallint에 텍스트를 삽입할 수 있습니까? (0) | 2022.09.14 |
평면상의 4개의 점이 직사각형을 형성하는지 알아보시겠습니까? (0) | 2022.09.14 |
C# 어플리케이션에서 Mariadb로의 접속 (0) | 2022.09.14 |
창문은 어떻게 정면으로 가져오죠? (0) | 2022.09.14 |