我的Python脚本为我的字符串添加了额外的不需要的字符

时间:2015-11-26 16:57:00

标签: python string

我正在尝试格式化字符串内的文件路径,但它会不断添加额外的'\'。

template = "{%% extends 'base.html' %%}"\
"{%% block content %%}"\
"                   "\
"<h1>%s</h2>"\
"                    "\
"<p>%s</p>           "\
"<p><img src= '%s'></p>"\
"{%% endblock %%}" %(title, text, img_path)

它会返回此信息。

 <p><img src= \'myDirectory/scarlett Johanson/1448556501.89.jpg\'></p>{% endblock %}'}

我不希望字符串前面的字符串和字符串中的jpg之后。我试图将最后一个字符切出字符串,但它只删除g并在结尾处留下\。让我感到困惑的是它在'myDirectory之前放置\。

我正在使用

创建文件
title = time.time()
file_path = os.path.join(BASE_PATH, '%s.jpg') % title

4 个答案:

答案 0 :(得分:1)

您是否尝试过使用带字符串格式化程序的tripple引号?

template = """
    {%% extends 'base.html' %%}
    {%% block content %%}

    <h1>{title}</h2>

    <p>{text}</p>
    <p><img src={img_path}></p>
    {%% endblock %%}
""".format(title=title, text=text, img_path=img_path)

单引号不应用于html属性

尝试打印模板,看看你得到了什么

print(template)

答案 1 :(得分:0)

这样你就可以解决问题了。

当您将字符串表示形式打印到控制台时,它将返回引号。

所以print(repr('hello'))会输出'hello'

如果字符串包含引号,即使未在之前转义,它也会被转义:

print(repr("'hello'"))提供'\'hello\''
print(repr('\'hello\''))给出'\'hello\''
print(repr("""'hello'"""))提供'\'hello\''

由于您正在打印包含字符串的字典,因此该字符串将被输出引用。 print({'a', 'hello'})提供{'a': 'hello'}

答案 2 :(得分:0)

我不知道它是否是最佳解决方案,但也许你可以在创建模板变量后使用它:

template=template.replace("\\'","'")

我相信在你的代码的某些其他部分,引用逃避的事情仍然存在......

答案 3 :(得分:0)

对不起,我不确定导致错误的原因。但是,处理它的一种方法是使用Drop。我不熟悉你的模板渲染器(我只使用过jinja2),但它必须是这样的:

replace