我是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行)
当我将所有内容放在一行中时,它就会消除错误。
有人可以展示如何在python中编写上面的小PHP脚本吗?所以我可以用它作为模板来修复我的视图。
[编辑]
我的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]
我添加了Ned和S.Lott建议的三重引号,如果我想打印出静态文本,它可以正常工作。如果我想创建动态html(例如行号),我会得到一个异常 - 无法连接'str'和'int'对象。
答案 0 :(得分:4)
我试图动态生成我的html,这意味着很多字符串操作。
不要这样做。
使用Django的模板。他们的工作非常非常好。如果您无法弄清楚如何应用它们,请执行此操作。问一个问题,说明你想做什么。不要问如何制作动态HTML。询问如何创建您尝试创建的任何页面功能。 80%的情况下,简单的{%if%}
或{%for%}
可以完成您需要的一切。其余的时间你需要知道过滤器和内置标签的工作原理。
如果您必须回归“动态”HTML,请使用string.Template
。 http://docs.python.org/library/string.html#template-strings一旦你尝试了这个,你会发现Django更好。
不要进行字符串操作来创建HTML。
无法连接'str'和'int'对象。
正确。你不能。
你有三个选择。
将int转换为字符串。使用str()
功能。这不能很好地扩展。你有很多特别的转换和东西。不愉快。
使用字符串的format()
方法将值插入字符串。这比复杂的字符串操作略胜一筹。在这样做了一段时间后,你弄清楚为什么模板是个好主意。
使用模板。您可以尝试string.Template
。过了一会儿,你弄明白为什么Django是个好主意。
<强> 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 :(得分:1)
在Python中,如果使用三引号,字符串可以跨越行:
"""
This is a
multiline
string
"""
您可能希望使用Django模板来创建HTML。阅读Django教程,了解它是如何完成的。
Python是强类型的,这意味着它不会自动转换类型以使表达式解决,就像PHP一样。所以你不能连接像这样的字符串和数字:"hello" + num
。