Django models.SlugField()
有助于我们创建一些很酷的网址.我的问题是为什么将它指定为一个字段
假设我有这个模型
class Blog(models.Model):
title = models.CharField()
Run Code Online (Sandbox Code Playgroud)
如果我想添加slug,我可以使用
class Blog(models.Model):
title = models.CharField()
def title_slug(self):
return slugify(self.title)
Run Code Online (Sandbox Code Playgroud)
在我可以使用的网址中
(r'^blog/(?P<id>\d+)/(?P<slug>[-\w]+)/$', 'app.views.blog_view'),
Run Code Online (Sandbox Code Playgroud)
并在意见中
def blog_view(request, id ,slug):
get_object_or_404(Blog, pk=id)
...
Run Code Online (Sandbox Code Playgroud)
网址看起来像
example.com/blog/23/why-iam-here/
有三件事让我采用这种方法
get_object_or_404(Blog, pk=id)
必须快于get_object_or_404(Blog, slug=slug)
.那为什么SlugField()?除了动态生成段塞的成本外,上述方法有哪些缺点?
如何在ASP.NET MVC框架中生成友好的URL?例如,我们有一个如下所示的URL:
http://site/catalogue/BrowseByStyleLevel/1
1是研究级别的Id(在这种情况下是更高的)来浏览,但我想以与StackOverflow相同的方式重新格式化URL.
例如,这两个网址会将您带到同一个地方:
编辑:网址的友好部分被称为slug.
我该怎么做才能防止slugify
过滤器剥离非ASCII字母数字字符?(我正在使用Django 1.0.2)
cnprog.com有问题URL中的中文字符,所以我查看了他们的代码.他们没有slugify
在模板中使用,而是在Question
模型中调用此方法来获取永久链接
def get_absolute_url(self):
return '%s%s' % (reverse('question', args=[self.id]), self.title)
Run Code Online (Sandbox Code Playgroud)
他们是否在诋毁网址?
诸如Rails和Django之类的Web框架内置了对"slugs"的支持,后者用于生成可读和SEO友好的URL:
团状串典型地只包含的字符a-z
,0-9
并-
且可因此在不URL转义写入(认为"富%20巴").
我正在寻找一个Java slug函数,给出任何有效的Unicode字符串将返回一个slug表示(a-z
,0-9
和-
).
一个微不足道的slug函数将是这样的:
return input.toLowerCase().replaceAll("[^a-z0-9-]", "");
Run Code Online (Sandbox Code Playgroud)
但是,此实现不会处理国际化和重音(ë
> e
).解决这个问题的一种方法是列举所有特殊情况,但这不是很优雅.我正在寻找更好的思考和一般的东西.
我的问题:
class Foo(models.Model):
title = models.CharField(max_length=20)
slug = models.SlugField()
Run Code Online (Sandbox Code Playgroud)
是否有一种内置的方法可以根据标题让slug字段自动填充?也许在管理员和管理员之外.
在我的PHP站点上,当前用户使用电子邮件地址和密码登录.我想添加一个用户名,他们设置的用户名将是唯一的,他们无法更改.我想知道如何使这个名称没有空格并在URL中工作,所以我可以使用用户名链接到配置文件和其他东西.如果用户名中有空格,则应添加下划线jason_davis.我不确定最好的方法吗?
我正在尝试在Django中创建一个独特的slug,以便我可以通过这样的URL访问帖子:http: //www.example.com/buy-a-new-bike_Boston-MA-02111_2
相关型号:
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
Run Code Online (Sandbox Code Playgroud)
ZipCode记录示例:
样本需求记录:
有关如何创建这个独特的slug的任何提示?它的组成是:
注意:上面我想要的slug假定slug"buy-a-new-bike_Boston-MA-02111"已经存在,这就是它附加了"_2"以使其独一无二.
我尝试过django-extensions,但它似乎只需要一个字段或字段来构造独特的slug.我需要传入get_city()函数以及标题和城市之间的"_"连接符.有人解决了这个并愿意分享?
谢谢!
UPDATE
我已经在其UUIDField中使用了django-extensions,所以如果它也可用于其AutoSlugField会很好!
拿一个如下的字符串:
在C#中:如何在逗号分隔的字符串列表中围绕字符串添加"引号"?
并将其转换为:
在-C-怎么办,我加引号围绕头字符串IN-A-逗号分隔的列表的串
要求:
ToSeoFriendly("hello world hello world", 14)
return"hello-world"
另请注意,是否应该有最小长度?
来自维基百科:
甲蛞蝓是识别使用人类可读关键字的页面的URL的一部分.
为了使用户更容易键入URL,通常也会删除或替换特殊字符.例如,重音字符通常被英文字母中的字母取代; 标点符号通常被删除; 和空格(必须编码为%20或+)由短划线( - )或下划线(_)代替,这些更美观.
我开发了一个照片共享网站,用户可以在其上传,分享和查看照片.
所有页面都是自动生成的,没有我对标题的控制.因为照片的标题或用户的名称可能包含重音字符或空格,我需要一个功能来自动创建slugs并保持可读的URL.
我创建了以下函数来替换重音字符(èçëçî),删除标点符号和错误字符(#@&〜^!)并以破折号转换空格.
php:
function sluggable($str) {
$before = array(
'àáâãäåòóôõöøèéêëðçìíîïùúûüñšž',
'/[^a-z0-9\s]/',
array('/\s/', '/--+/', '/---+/')
);
$after = array(
'aaaaaaooooooeeeeeciiiiuuuunsz',
'',
'-'
);
$str = strtolower($str);
$str = strtr($str, $before[0], $after[0]);
$str = preg_replace($before[1], $after[1], $str);
$str = trim($str);
$str = preg_replace($before[2], $after[2], $str);
return $str;
}
Run Code Online (Sandbox Code Playgroud) slug ×10
django ×4
friendly-url ×3
seo ×3
string ×3
php ×2
python ×2
ascii ×1
asp.net-mvc ×1
c# ×1
converter ×1
java ×1
javascript ×1
regex ×1
unicode ×1