Создание представлений в django (проблемы с отступами строк) - PullRequest
0 голосов
/ 24 октября 2010

Я новичок в обоих Python (и django) - но не в программировании.

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

Например, используя PHP, следующий тривиальный пример демонстрирует создание документа HTML, содержащего таблицу

<?php 
$output = '<html><head><title>Getting worked up over Python indentations</title></head><body>';

output .= '<table><tbody>'
for($i=0; $i< 10; $i++){
   output .= '<tr class="'.(($i%2) ? 'even' : 'odd').'"><td>Row: '.$i;
}
$output .= '</tbody></table></body></html>'

echo $output;

Я пытаюсь сделать что-то подобное в Python (в моем views.py), и я получаю сообщения об ошибках типа:

EOL при сканировании строкового литерала (views.py, строка 21)

Когда я помещаю все в одну строку, это избавляет от ошибки.

Может кто-нибудь показать, как маленький скрипт php выше будет написан на python?, Так что я могу использовать его в качестве шаблона для исправления моего представления.

[Изменить]

Мой код Python выглядит примерно так:

def just_frigging_doit(request):
    html = '<html>
                <head><title>What the funk<title></head>
                <body>'

    # try to start builing dynamic HTML from this point onward...
    # but server barfs even further up, on the html var declaration line.

[Edit2]

Я добавил тройные кавычки, подобные предложенным Недом и С. Лоттом, и это прекрасно работает, если я хочу распечатать статический текст. Если я хочу создать динамический HTML (например, номер строки), я получаю исключение - не могу объединить объекты 'str' и 'int'.

Ответы [ 2 ]

4 голосов
/ 24 октября 2010

Я пытаюсь генерировать мой HTML динамически, так что это требует большого количества манипуляций со строками.

Не делай этого.

  1. Используйте шаблоны Django. Они работают очень, очень хорошо. Если вы не можете понять, как их применять, сделайте это. Задайте вопрос, показывающий, что вы хотите сделать. Не спрашивайте, как сделать динамический HTML. Спросите о том, как создать любой элемент страницы, который вы пытаетесь создать. В 80% случаев простой {%if%} или {%for%} делает все, что вам нужно. В остальное время вам нужно знать, как работают фильтры и встроенные теги.

  2. Используйте string.Template, если вам нужно вернуться к «динамическому» HTML. http://docs.python.org/library/string.html#template-strings Как только вы попробуете это, вы обнаружите, что Джанго лучше.

Не выполнять манипуляции со строками для создания HTML.


не может объединить объекты 'str' и 'int'.

Правильно. Вы не можете.

У вас есть три варианта.

  1. Конвертировать int в строку. Используйте функцию str(). Это плохо масштабируется. У вас есть много специальных преобразований и прочего. Неприятно.

  2. Используйте метод format() строки для вставки значений в строку. Это немного лучше, чем сложные манипуляции со строками. Поработав некоторое время, вы поймете, почему шаблоны являются хорошей идеей.

  3. Использовать шаблон. Вы можете попробовать string.Template. Через некоторое время вы понимаете, почему Джанго - хорошая идея.


my_template.html

<html><head><title>Getting worked up over Python indentations</title></head><body>
<table><tbody>
{%for object in objects%}
    <tr class="{%cycle 'even' 'odd'%}"><td>Row: {{object}}</td></tr>
{%endfor%}
</tbody></table></body></html>

views.py

def myview( request ):
    render_to_response( 'my_template.html',
         { 'objects':range(10) }
    )

Думаю, это все, что вам нужно для макета.

1 голос
/ 24 октября 2010
  1. В Python строка может занимать строки, если вы используете тройные кавычки:

    """
    This is a 
    multiline
    string
    """
    
  2. Возможно, вы захотите использовать шаблоны Django для создания своего HTML. Прочитайте учебник по Django, чтобы увидеть, как это делается.

  3. Python строго типизирован, то есть он не будет автоматически конвертировать типы для вас, чтобы ваши выражения работали, как PHP. Таким образом, вы не можете объединять строки и числа следующим образом: "hello" + num.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...