django render_to_string无效

时间:2011-09-24 08:27:25

标签: ajax django django-views

我正在尝试实现ajax视图来创建一个对象,然后将其返回并将其插入到模板中。它几乎正常工作,除了我似乎无法使render_to_string()工作以呈现要插入的html。正在创建对象并返回html并将其插入到模板中,但是变量不包含在html中。我的观点如下。

def tr_create_xhr(request, person, slug):
if request.method == "POST":
    form = TopicResourceForm(request.POST)
    if form.is_valid():
        try:
            r = Resource.objects.get(url=form.cleaned_data['resource'])
        except Resource.DoesNotExist:
            r = Resource.objects.create(url=form.cleaned_data['resource'], rtype=form.cleaned_data['rtype'])
            r.save()
    obj = form.save(commit=False)
    obj.resource = r
    try:
        topic = Topic.objects.get(person__user=request.user, slug__iexact=slug)
    except Topic.DoesNotExist:
        return Http404
    obj.topic = topic        
    objs = obj.save()
    html = render_to_string('includes/tr_inc.html',{"r":objs, "topic":topic})
    res = {'html':html}
    if request.is_ajax():
        return HttpResponse(simplejson.dumps(res), mimetype="application/json")
    else:
        return HttpResponseRedirect("../..")
return Http404

这是模板“includes / tr_inc.html”:

{% load markup %}
{% load people_tags %}



    <li>

        <h5>{{ r.title }}</h5>
        <p><a class="tru" href={{ r.resource.url }}>{{ r.resource.url|sliceit:70 }}</a></p>
        <span class="oc"><p>Added {{ r.added }}{% if r.rtype %} |<a href={% url resource_type_detail r.rtype.slug %}>{{ r.rtype }}</a>{% endif %}

| <a href="/topics/user/{{ r.topic.person.user }}/{{ r.topic.slug }}/topic-resource/delete/{{ r.id }}/">Delete</a> <a href="/topics/user/{{ r.topic.person.user }}/{{ r.topic.slug }}/topic-resource/edit/{{ r.id }}/">Edit</a>

        {{ r.note|markdown }}</span>
    </li>

返回的html字符串是没有插入任何变量的模板。

2 个答案:

答案 0 :(得分:1)

模型方法'save'不返回对象。所以你'objs'变量是空的。你应该写

html = render_to_string('includes/tr_inc.html',{"r":obj, "topic":topic})

答案 1 :(得分:1)

我今天遇到了同样的问题。这很容易。请检查Django文档中的此方法,实际上有第三个可选参数:context_instance=RequestContext(request)。因此,render_to_string应该是这样的:

html = render_to_string(
    'includes/tr_inc.html',{"r":obj, "topic":topic},
    context_instance=RequestContext(request))

然后一切都应该正常运作。