2011-09-24 75 views
0

我想实现一个ajax视图来创建一个对象,然后将其返回并将其插入到模板中。它几乎可以工作,除非我似乎无法让render_to_string()工作来呈现插入的html。该对象正在被创建,html被返回并被插入到模板中,但是这些变量不包含在html中。我的观点如下。django render_to_string not working

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 

这是模板 “包括/ 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字符串是没有任何插入变量的模板。

+0

你是什么意思“变量不包含在html中”?在您的问题中包括预期与实际产出。 –

回答

1

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

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

谢谢,终于搞定了一切。 – thesteve

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)) 

然后,一切都应该正常工作。