Django,预填充的_字段
我想知道在ModelAdmin之外是否有预填充的_字段 我想创建一个slugfield,其中值来自字段标题 问候,, 阿西诺克斯我不知道。 我使用javascript和AJAX做了类似的事情:当标题字段失去焦点时,带有它的AJAX请求被发送到应用程序中的url,该url返回一个slug。下面是javascript:Django,预填充的_字段,django,django-models,Django,Django Models,我想知道在ModelAdmin之外是否有预填充的_字段 我想创建一个slugfield,其中值来自字段标题 问候,, 阿西诺克斯我不知道。 我使用javascript和AJAX做了类似的事情:当标题字段失去焦点时,带有它的AJAX请求被发送到应用程序中的url,该url返回一个slug。下面是javascript: <script type="text/javascript"> Event.observe(window, 'load', function() { form =
<script type="text/javascript">
Event.observe(window, 'load', function() {
form = $("post_form");
title = $('id_title');
slug = $('id_slug');
title.observe('blur', getSlug);
});
function getSlug() {
var titleText = $F(title);
ajax = new Ajax.Request("/blog/utils/get-slug", {
'method': 'get',
'parameters': {'title': titleText},
'onSuccess': setSlug
})
}
function setSlug(transport) {
var slugText = transport.responseText;
slug.value = slugText
}
</script>
事件。观察(窗口“加载”,函数(){
表格=$(“邮政表格”);
title=$('id_title');
slug=$('id_slug');
标题:观察('blur',getSlug);
});
函数getSlug(){
var titleText=$F(标题);
ajax=new ajax.Request(“/blog/utils/get slug”{
'方法':'获取',
参数:{'title':titleText},
“onSuccess”:设置凸耳
})
}
功能定位片(运输){
var slugText=transport.responseText;
slug.value=slugText
}
它使用Prototype,但您也可以轻松地使用jQuery或其他任何东西。
在Django方面,这里是AJAX请求指向的视图,以及一些帮助程序函数:
def GetSlug(request):
"""This Django view provides a url-friendly slug based on a given post title.
It helps avoid primary key violations by creating different slug names
for posts with the same title.It is designed to be called by an AJAX
request from within the admin interface."""
title = request.GET.get('title', None)
title = unquote(title)
if not title:
return HttpResponseNotFound("")
result = findSlug(title)
if not result:
result = ""
return HttpResponse(result)
def findSlug(title):
title = urlify(title)
words = title.split('-')
if len(words) > 5:
title = "-".join(words[0:5])
extraWords = words[5:]
else:
extraWords = []
def testSlug(slug):
try:
Post.objects.get(slug=slug)
except Post.DoesNotExist:
return slug
return False
#if slug does not already exist, return that
if testSlug(title):
return title
#if title had extra words, add them one at a time and test that
else:
for word in extraWords:
title = title + "-" + word
if testSlug(title):
return title
#if we've run out of words and slug is _still_ not unique, try incrementing: title-2, title-3, etc.
incrementor = 2
while incrementor < 10:
tempTitle = title + "-%d" + incrementor
if testSlug(tempTitle):
return tempTitle
#if all else fails, punt to the user
return None
def urlify(string):
"""This takes a string (say, a post title) and convets it to something url-friendly
>>> title = "I read \"War & Peace\" to-day"
>>> urlify(title)
i-read-war-and-peace-to-day
"""
string = string.lower().strip() #remove leading, trailing whitespace
string = string.replace("&", "and")
string = re.sub("[^a-z0-9- ]", "", string) #remove non-alphanumeric chars (except dashes and spaces)
string = re.sub("\W+", "-", string) #replace whitespace with "-"
string = re.sub("-{2,}", "-", string) #remove double dahses
return string
def GetSlug(请求):
“”“此Django视图基于给定的文章标题提供url友好的slug。
它通过创建不同的slug名称来帮助避免主键冲突
用于具有相同标题的帖子。它被设计为由AJAX调用
来自管理界面内的请求。”“”
title=request.GET.GET('title',无)
title=unquote(标题)
如果不是标题:
返回HttpResponseNotFound(“”)
结果=findSlug(标题)
如果没有结果:
result=“”
返回HttpResponse(结果)
def findSlug(标题):
title=urlify(title)
单词=标题。拆分('-'))
如果len(字)>5:
title=“-”.join(单词[0:5])
extraWords=单词[5:]
其他:
外部词=[]
def测试段塞(段塞):
尝试:
Post.objects.get(slug=slug)
除Post.DoesNotExist外:
回流段塞
返回错误
#如果slug不存在,则返回该值
如果是testSlug(标题):
返回标题
#若标题中有额外的单词,那个么一次添加一个并测试它
其他:
对于外部单词:
title=title+“-”+单词
如果是testSlug(标题):
返回标题
#如果我们已经用光了单词,slug仍然不是唯一的,那么尝试递增:title-2、title-3,等等。
增量=2
当增量小于10时:
TENTITLE=标题+“-%d”+增量
如果testSlug(testitle):
归还诱惑物
#如果所有其他操作都失败,请向用户下注
一无所获
def urlify(字符串):
“”“这将获取一个字符串(例如,文章标题)并将其转换为url友好的内容
>>>title=“我今天读了\“战争与和平\”
>>>urlify(标题)
我今天读了《战争与和平》
"""
string=string.lower().strip()#删除前导和尾随空格
字符串=字符串。替换(“&”,“and”)
string=re.sub(“[^a-z0-9-]”,string)#删除非字母数字字符(破折号和空格除外)
string=re.sub(“\W+”,“-”,string)#将空格替换为“-”
string=re.sub(“-{2,}”,“-”,string)#删除双dahs
返回字符串
GetSlug视图非常努力地返回有用但唯一的内容,即使在标题可能已经存在于另一条记录中的情况下也是如此 据我所知,没有。
我使用javascript和AJAX做了类似的事情:当标题字段失去焦点时,带有它的AJAX请求被发送到应用程序中的url,该url返回一个slug。下面是javascript:
<script type="text/javascript">
Event.observe(window, 'load', function() {
form = $("post_form");
title = $('id_title');
slug = $('id_slug');
title.observe('blur', getSlug);
});
function getSlug() {
var titleText = $F(title);
ajax = new Ajax.Request("/blog/utils/get-slug", {
'method': 'get',
'parameters': {'title': titleText},
'onSuccess': setSlug
})
}
function setSlug(transport) {
var slugText = transport.responseText;
slug.value = slugText
}
</script>
事件。观察(窗口“加载”,函数(){
表格=$(“邮政表格”);
title=$('id_title');
slug=$('id_slug');
标题:观察('blur',getSlug);
});
函数getSlug(){
var titleText=$F(标题);
ajax=new ajax.Request(“/blog/utils/get slug”{
'方法':'获取',
参数:{'title':titleText},
“onSuccess”:设置凸耳
})
}
功能定位片(运输){
var slugText=transport.responseText;
slug.value=slugText
}
它使用Prototype,但您也可以轻松地使用jQuery或其他任何东西。
在Django方面,这里是AJAX请求指向的视图,以及一些帮助程序函数:
def GetSlug(request):
"""This Django view provides a url-friendly slug based on a given post title.
It helps avoid primary key violations by creating different slug names
for posts with the same title.It is designed to be called by an AJAX
request from within the admin interface."""
title = request.GET.get('title', None)
title = unquote(title)
if not title:
return HttpResponseNotFound("")
result = findSlug(title)
if not result:
result = ""
return HttpResponse(result)
def findSlug(title):
title = urlify(title)
words = title.split('-')
if len(words) > 5:
title = "-".join(words[0:5])
extraWords = words[5:]
else:
extraWords = []
def testSlug(slug):
try:
Post.objects.get(slug=slug)
except Post.DoesNotExist:
return slug
return False
#if slug does not already exist, return that
if testSlug(title):
return title
#if title had extra words, add them one at a time and test that
else:
for word in extraWords:
title = title + "-" + word
if testSlug(title):
return title
#if we've run out of words and slug is _still_ not unique, try incrementing: title-2, title-3, etc.
incrementor = 2
while incrementor < 10:
tempTitle = title + "-%d" + incrementor
if testSlug(tempTitle):
return tempTitle
#if all else fails, punt to the user
return None
def urlify(string):
"""This takes a string (say, a post title) and convets it to something url-friendly
>>> title = "I read \"War & Peace\" to-day"
>>> urlify(title)
i-read-war-and-peace-to-day
"""
string = string.lower().strip() #remove leading, trailing whitespace
string = string.replace("&", "and")
string = re.sub("[^a-z0-9- ]", "", string) #remove non-alphanumeric chars (except dashes and spaces)
string = re.sub("\W+", "-", string) #replace whitespace with "-"
string = re.sub("-{2,}", "-", string) #remove double dahses
return string
def GetSlug(请求):
“”“此Django视图基于给定的文章标题提供url友好的slug。
它通过创建不同的slug名称来帮助避免主键冲突
用于具有相同标题的帖子。它被设计为由AJAX调用
来自管理界面内的请求。”“”
title=request.GET.GET('title',无)
title=unquote(标题)
如果不是标题:
返回HttpResponseNotFound(“”)
结果=findSlug(标题)
如果没有结果:
result=“”
返回HttpResponse(结果)
def findSlug(标题):
title=urlify(title)
单词=标题。拆分('-'))
如果len(字)>5:
title=“-”.join(单词[0:5])
extraWords=单词[5:]
其他:
外部词=[]
def测试段塞(段塞):
尝试:
Post.objects.get(slug=slug)
除Post.DoesNotExist外:
回流段塞
返回错误
#如果slug不存在,则返回该值
如果是testSlug(标题):
返回标题
#若标题中有额外的单词,那个么一次添加一个并测试它
其他:
对于外部单词:
title=title+“-”+单词
如果是testSlug(标题):
返回标题
#如果我们已经用光了单词,slug仍然不是唯一的,那么尝试递增:title-2、title-3,等等。
增量=2
当增量小于10时:
TENTITLE=标题+“-%d”+增量
如果testSlug(testitle):
归还诱惑物
#如果所有其他操作都失败,请向用户下注
复述