2013-03-20 5 views
-1

Это очень простая проблема, но я просто не могу понять это.django - render_to_response - некоторые вещи отображаются

У меня есть представление, которое выводит строку, а затем вызывает render_to_response. Однако я хочу добавить некоторые другие материалы для отображения в шаблон, который не пришел из базы данных. Я просто не могу понять, как это сделать, и я не могу найти что-либо в документации, которая охватывает эту ситуацию.

Все работает так, как должно быть, если я просто передаю результаты извлечения базы данных - форма получает визуализацию и т. Д. Как только я представляю некоторые другие вещи, я либо получаю 500 (как в примере ниже), либо просто полностью игнорируется.

(Вещами я работаю в примерах, показанных ниже, является своим родом мутации приложения в Джанго Tutorial опроса так извинения, если некоторые из названий кажется немного странным)

VIEW

Как и объект BookMark, я добавляю некоторые сводные данные, в моем примере строку «test title».

def detail(request, bookmark_id): 
    try: 
     b = BookMark.objects.get(pk=bookmark_id) 
     d = {'title' = 'test title'} 
    except Poll.DoesNotExist: 
     raise Http404 
    return render_to_response( 'bookmarks/bookmark_detail.html', 
      {'bookmark': b, 'title': d}, 
           context_instance=RequestContext(request)) 

БАЗА ШАБЛОН

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <title>{% block title %}Default Title from base.html{% endblock %}</title> 
    </head> 
    <body> 
     <div id="topstuff"> 
      <h1>This is top stuff</h1> 
     </div> 
     <div id="content"> 
      {% block content %}{% endblock %} 
     </div> 
     <div id="bottomstuff"> 
      <h1>This is bottom stuff</h1> 
     </div> 
    </body> 
</html> 

ВНУТРЕННИЙ ШАБЛОН

{% extends "base.html" %} 

{{ bookmark }} 


{% block title %}{{ title.title }}{% endblock title %} 

{% block content %} 

    <h1>{{ poll.question }}</h1> 

    {% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %} 

    <form action="/polls/{{ poll.id }}/vote/" method="post"> 
     {% csrf_token %} 
     <table> 
      <tr> 
       <td>URL:</td> 
       <td><input type="text" name="url" id="url" value="{{ bookmark.url }}" /></td> 
      </tr> 
      <tr> 
       <td>TITLE:</td> 
       <td><input type="text" name="title" id="title" value="{{ bookmark.title }}" /></td> 
      </tr> 
      <tr> 
       <td>NOTES:</td> 
       <td><input type="text" name="notes" id="notes" value="{{ bookmark.notes }}" /></td> 
      </tr> 
     </table> 
     <input type="submit" value="Submit" /> 
    </form> 

{% endblock content%} 

EDIT: Как указывалось в комментариях у меня была опечатка там так просто ради будущих искателей либо из следующих двух подходов работы:

ВАРИАНТ 1 значение Вставить непосредственно в словарь передается render_to_response следующим

return render_to_response( 'bookmarks/bookmark_detail.html', 
     {'bookmark': b, 'title':'test title1'}, 
    context_instance=RequestContext(request)) 

Обратитесь к этому значению в шаблоне следующим образом:

{% block title %}{{ title }}{% endblock title %} 

OPTION2 Создание словаря контейнер для хранения других ценностей, а затем вставлять, что в словарь передается render_to_response следующим

d = {'title':'test title 2'} 
return render_to_response( 'bookmarks/bookmark_detail.html', 
     {'bookmark': b, 'title':d}, 
    context_instance=RequestContext(request)) 

Обратитесь к этому значению в шаблоне следующим образом:

{% block title %}{{ title.title }}{% endblock title %} 
+1

Синтаксическая ошибка: 'd = { 'название' = 'тест название'}' 'внутри вашей detail' функция –

+0

Спасибо за указав, что вне – glaucon

+0

, пожалуйста, закройте вопрос, если у вас есть решение (добавьте свое решение в качестве ответа и отметьте его как выбранный ответ) –

ответ

1

Как в комментариях у меня была опечатка, так что только для будущих искателей работает один из двух следующих подходов:

ВАРИАНТ 1 значение Вставить непосредственно в словарь передается render_to_response следующим

return render_to_response( 'bookmarks/bookmark_detail.html', 
     {'bookmark': b, 'title':'test title1'}, 
    context_instance=RequestContext(request)) 

Обратитесь к этому значению в шаблоне следующим образом:

{% block title %}{{ title }}{% endblock title %} 

option2 Создание контейнера словарь для хранения других значений, а затем вставлять их в словарь, переданный в render_to_response, следующим образом:

d = {'title':'test title 2'} 
return render_to_response( 'bookmarks/bookmark_detail.html', 
     {'bookmark': b, 'title':d}, 
    context_instance=RequestContext(request)) 

Обратитесь к этому значению в шаблоне следующим образом:

{% block title %}{{ title.title }}{% endblock title %} 
Смежные вопросы