首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Django中创建一个独特的插件

如何在Django中创建一个独特的插件
EN

Stack Overflow用户
提问于 2010-09-29 03:25:13
回答 11查看 29.5K关注 0票数 31

我正在尝试在Django中创建一个独特的插件,这样我就可以通过这样的url访问帖子:http://www.example.com/buy-a-new-bike_Boston-MA-02111_2

相关模型:

代码语言:javascript
复制
class ZipCode(models.Model):
    zipcode = models.CharField(max_length=5)
    city = models.CharField(max_length=64)
    statecode = models.CharField(max_length=32)

class Need(models.Model):
    title = models.CharField(max_length=50)
    us_zip = models.CharField(max_length=5)
    slug = ?????

    def get_city():
        zip = ZipCode.objects.get(zipcode=self.us_zip)
        city = "%s, %s %s" % (zip.city, zip.statecode, zip.zipcode)
        return city

示例ZipCode记录:

邮政编码=“02111”城市邮政编码= "Boston"

  • statecode =“MA”

示例需要记录:

  • title =“购买一辆新自行车”
  • us_zip= "02111"
  • slug = "buy-a- new -bike_Boston-MA-02111_2“(所需)

关于如何创建这个独特的弹头,有什么建议吗?它的组成是:

  • Need.title + "_“+ Need.get_city() + "_”+一个可选的递增整数,使其唯一。所有空格都应替换为“-”。

注意:上面我想要的插件假设"buy-a-new-bike_Boston-MA-02111“已经存在,这就是附加了"_2”的插件,使其具有唯一性。

我尝试过django-extensions,但它似乎只能使用一个字段或字段元组来构造唯一的slug。我需要传入get_city()函数以及标题和城市之间的"_“连接器。有人解决了这个问题并愿意分享吗?

谢谢!

更新

我已经为它的UUIDField使用了django-extensions,所以如果它也可以用于它的AutoSlugField就更好了!

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2010-09-29 03:57:37

我使用这个snippet生成唯一的插件,典型的保存方法如下所示

slug将是带有blank=True的Django SlugField,但在保存方法中强制使用slug。

需要模型的典型保存方法可能如下所示

代码语言:javascript
复制
def save(self, **kwargs):
    slug_str = "%s %s" % (self.title, self.us_zip) 
    unique_slugify(self, slug_str) 
    super(Need, self).save(**kwargs)

这将生成诸如buy-a-new-bike_Boston MA-02111、buy-a-new-bike_MA-02111-1等插件。输出可能略有不同,但您始终可以查看代码片段并根据需要进行定制。

票数 44
EN

Stack Overflow用户

发布于 2011-06-30 21:34:41

我的小代码:

代码语言:javascript
复制
def save(self, *args, **kwargs):
    strtime = "".join(str(time()).split("."))
    string = "%s-%s" % (strtime[7:], self.title)
    self.slug = slugify(string)
    super(Need, self).save()
票数 8
EN

Stack Overflow用户

发布于 2011-06-01 02:50:22

如果你正在考虑使用一个应用程序来为你做这件事,这里就有一个。

https://github.com/un33k/django-uuslug

代码语言:javascript
复制
UUSlug = (``U``nique + ``U``code Slug)


Unicode Test Example
=====================
from uuslug import uuslug as slugify

s = "This is a test ---"
r = slugify(s)
self.assertEquals(r, "this-is-a-test")

s = 'C\'est déjà l\'été.'
r = slugify(s)
self.assertEquals(r, "c-est-deja-l-ete")

s = 'Nín hǎo. Wǒ shì zhōng guó rén'
r = slugify(s)
self.assertEquals(r, "nin-hao-wo-shi-zhong-guo-ren")

s = '影師嗎'
r = slugify(s)
self.assertEquals(r, "ying-shi-ma")


Uniqueness Test Example
=======================
Override your objects save method with something like this (models.py)

from django.db import models
from uuslug import uuslug as slugify

class CoolSlug(models.Model):
    name = models.CharField(max_length=100)
    slug = models.CharField(max_length=200)

    def __unicode__(self):
        return self.name

    def save(self, *args, **kwargs):
        self.slug = slugify(self.name, instance=self)
        super(CoolSlug, self).save(*args, **kwargs)

Test:
=====

name = "john"
c = CoolSlug.objects.create(name=name)
c.save()
self.assertEquals(c.slug, name) # slug = "john"

c1 = CoolSlug.objects.create(name=name)
c1.save()
self.assertEquals(c1.slug, name+"-1") # slug = "john-1"
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3816307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档