正在处理我之前的hit count question并遇到另一个绊脚石:如何通过ajax发布对象的模型信息?
我正在为我的许多模型使用通用object_detail
视图,我想在调用我的updapte_object_hit_count
函数的模板中添加一些ajax(从而跟踪对象的命中数)。
但由于数据是通过json / ajax传递的,我不知道我是如何确定我正在使用的模型/对象。
例如,我想做什么(jQuery):
$(document).ready(function() {
var data = {
model : "{{ object.model }}", // this doesn't work, obviously
pk : "{{ object.pk }}",
};
$.post('{% url update_object_hit_count %}',data);
});
在我看来,聪明的东西如下:
def update_object_hit_count(request):
post = request.POST.copy()
model = post['model']
obj = model.objects.get(pk=post['pk'])
# more stuff using this obj
关于如何实现这一目标的任何想法?我以为我可以使用ContentType但不确定如何......
答案 0 :(得分:1)
您可以创建自定义过滤器(django docs)。
from django import template
register = template.Library()
@register.filter
def app_label(value):
"""Return an object's app_label"""
try:
return value._meta.app_label
except:
pass
@register.filter
def object_name(value):
"""Return an object's object_name"""
try:
return value._meta.object_name
except:
pass
然后在你的模板中:
{% load ... %}
{{ object|app_label }}
{{ object|object_name }}
我能想到的另一种方法是在模型中添加属性。这意味着您不必修改模型
答案 1 :(得分:1)
使用michael描述的自定义过滤器并使用django.db.model.get_model
检索我提供的应用名称和型号名称的对象
要一次检索这两种信息,自定义标记可能比过滤器
更有用本文中有关get_model
的更多信息:http://www.b-list.org/weblog/2006/jun/07/django-tips-write-better-template-tags/