如何从django中的表单清理和修改数据.我想在每个模型的每个字段的基础上定义它,就像使用ModelForms一样.
我想要实现的是自动从定义的字段中删除前导和尾随空格,或者将标题(从一个字段)转换为slug(这将是另一个字段).
我猜这将涉及正则表达式或其他什么,但我会试一试.在某一刻,用户可以通过£$(*£$(£@$&£($在标题字段中键入类似于使用Django转换为slug的内容来打破网站slugify.
因为这些字符都不能转换,所以Django会返回错误.我的问题是,forms.ValidationError当用户使用这样的标题时,我应该在表单验证方法中提出什么?
谢谢.
有没有办法在django的管理网站中使用预先填充的字段获得与标准模型中的slug字段相同的结果
我目前正在Django开展一个玩具项目.
我的应用程序的一部分允许用户留下评论.我想获取评论的标题并将其强化以创建一个网址.
因此,如果用户写了一篇名为"有史以来最好的东西!"的评论,那么网址就像:www.example.com/reviews/the-best-thing-ever.
这一切都很好,但处理两个用户选择相同标题的情况的最佳方法是什么?我不想让标题必须是唯一的.
我曾考虑在某个地方的网址中添加评论ID,但我想避免任何不碰撞的网址的额外信息.
有任何想法吗?
快速检查是否有人知道或知道能够从给定的nvarchar输入生成slug的T-SQL函数.即;
"Hello World">"hello-world"
"这是一个测试">"这是一个测试"
我有一个C#函数,我通常用于这些目的,但在这种情况下,我有大量的数据要解析并变成slug,所以在SQL Server上执行它更有意义,而不是必须传输数据电线.
顺便说一句,我没有远程桌面访问框,所以我不能运行代码(.net,Powershell等)对它
提前致谢.
编辑:根据要求,这是我通常用来生成slugs的函数:
public static string GenerateSlug(string n, int maxLength)
{
string s = n.ToLower();
s = Regex.Replace(s, @"[^a-z0-9s-]", "");
s = Regex.Replace(s, @"[s-]+", " ").Trim();
s = s.Substring(0, s.Length <= maxLength ? s.Length : maxLength).Trim();
s = Regex.Replace(s, @"s", "-");
return s;
}
Run Code Online (Sandbox Code Playgroud) 如何从完整的URL中提取第一个URL段?应清理第一个URL段以替换-空格.
完整的URL
http://www.domain.com/River-Island/River-Island-T-Shirt-with-Triangle-Girl-Print/Prod/pgeproduct.aspx?iid=2516020
Run Code Online (Sandbox Code Playgroud)
期望的Outpput
River Island
Run Code Online (Sandbox Code Playgroud) 我刚刚在我的rails项目中添加了Friendly_id gem,希望不使用数据库ID并创建一个slug,但我似乎无法为旧记录创建slug.我的模型看起来像这样.
class Mapping < ActiveRecord::Base
extend FriendlyId
friendly_id :title, use: :slugged
# Friendly_Id code to only update the url for new records
def should_generate_new_friendly_id?
new_record? || slug.blank?
end
end
Run Code Online (Sandbox Code Playgroud)
我正在跑步,Model.find_each(&:save)但它一直在吐出一个零结果.我已经尝试should_generate_new_friendly_id完全评论,但没有运气.有谁看到我在这里做错了什么?
编辑
我回滚了我的数据库并重写了我的迁移,这似乎解决了这个问题.
我有一个功能,为页面标题创建独特的slug.它检查页面表中是否有slug然后通过相应地添加'-int'来创建一个独特的slug.该功能适用于前三个条目,例如,三次进入的'test slug'将创建'test-slug-1','test-slug-2'和'test-slug-3'.然后,我得到第四个条目的错误"致命错误:超过30秒的最大执行时间".逻辑应该有一些问题,任何人都可以帮我找到它.Below是代码:
function createSlug($title, $table_name, $field_name) {
global $db_connect;
$slug = preg_replace("/-$/","",preg_replace('/[^a-z0-9]+/i', "-", strtolower($title)));
$counter = 1;
do{
$query = "SELECT * FROM $table_name WHERE $field_name = '".$slug."'";
$result = mysqli_query($db_connect, $query) or die(mysqli_error($db_connect));
if(mysqli_num_rows($result) > 0){
$count = strrchr($slug , "-");
$count = str_replace("-", "", $count);
if($count > 0){
$length = count($count) + 1;
$newSlug = str_replace(strrchr($slug , "-"), '',$slug);
$slug = $newSlug.'-'.$length;
$count++;
}else{
$slug = $slug.'-'.$counter;
}
}
$counter++;
$row = mysqli_fetch_assoc($result);
}while(mysqli_num_rows($result) > 0);
return $slug; …Run Code Online (Sandbox Code Playgroud) 我想要实现的是:我的新闻应用程序应该显示一个slug,但只能通过ID以/ news/24/this-is-the-slug的形式查询文章
不幸的是,我NoReverseMatch: Reverse for 'news_detail' with arguments '('',)' and keyword arguments '{}' not found.在尝试浏览文章时遇到了问题.如上所述,模板中生成的URL看起来是正确的(我可以通过Haystack进行搜索来确认这一点,Haystack提供正确的URL).
models.py
class News(models.Model):
id = models.IntegerField(primary_key=True, editable=False)
category = models.CharField(max_length=50L)
title = models.CharField(max_length=200L)
rss_summary = models.TextField(max_length=2000L)
body_text = models.TextField(max_length=5000L)
post_date = models.DateTimeField()
prettyurl = models.SlugField(max_length=100L)
class Meta:
db_table = 'news'
def __unicode__(self):
return self.title
def get_absolute_url(self):
return urlresolvers.reverse('news_detail', kwargs={'pk': self.id, 'slug': self.prettyurl })
Run Code Online (Sandbox Code Playgroud)
urls.py
urlpatterns = patterns(
'',
url(
r'^$',
view=views.NewsListView.as_view(),
name='news_index'),
url(
r'^(?P<pk>\d+)/',
view=views.NewsDetailView.as_view(),
name='news_detail'),
url(
r'^(?P<pk>\d+)/(?P<slug>[-\w]+)/$',
view=views.NewsDetailView.as_view(),
name='news_detail'),
url( …Run Code Online (Sandbox Code Playgroud) 希望限制 WP 查询的返回字段,以帮助加快服务器的响应速度并减少检索的数据量。对于我正在使用的查询,它最多只需要3个字段的数据,其余的通过循环中的ACF get_field_object引入。我使用的其他函数(例如 get_posts 或 get_terms)具有字段选项,但仅限于少数内容,例如仅“slug”或“id => slug”。
我习惯于在 CakePHP 中进行开发,它可以选择指定要返回的每个字段,但该项目需要 wordpress 来实现其他功能,因此我的能力非常有限。
TL;DR 需要加快从 Wordpress 获取帖子的速度
slug ×10
django ×5
python ×3
php ×2
collision ×1
django-1.5 ×1
django-forms ×1
django-urls ×1
forms ×1
friendly-id ×1
loops ×1
mysql ×1
pretty-urls ×1
regex ×1
ruby ×1
t-sql ×1
unique ×1
url ×1
validation ×1
wordpress ×1