V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ssxn58
V2EX  ›  Django

dJango 新手的一个模板渲染问题

  •  1
     
  •   ssxn58 · 2017-11-08 11:30:03 +08:00 · 3726 次点击
    这是一个创建于 2354 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我需要的最终效果是这样的:

  • 第 1 条附言  ·  2017-11-08 14:50:30 +08:00
    目标效果是这样的:

    <li><img src="images/first.png" /><a href="toggle/?name=first &action=on">开</a><a href="toggle/?name=first &action=off">关</a></li>
    <li><img src="images/second.png" /><a href="toggle/?name=second &action=on">开</a><a href="toggle/?name=second &action=off">关</a></li>
    <li><img src="images/third.png" /><a href="toggle/?name=third &action=on">开</a><a href="toggle/?name=third &action=off">关</a></li>
    <li><img src="images/fourth.png" /><a href="toggle/?name=fourth &action=on">开</a><a href="toggle/?name=fourth &action=off">关</a></li>

    我的实现是这样的:
    模板:
    <li>{{ first }}</li>
    <li>{{ second }}</li>
    <li>{{ third }}</li>
    <li>{{ fourth }}</li>
    python 代码:
    def index(request):
    context = {}
    names = ['first','second','third','fourth']
    for name in names :
    context[name] = '<img src="images/'+name+'.png" /><a href="toggle/?name='+name+'&action=on">开</a><a href="toggle/?name='+name+'&action=off">关</a>'

    return render(request,'index.html',context=context)
    实际效果是 python 代码里面的 HTML 标签被渲染成字符串了,这个应该怎么处理,让 python 代码里面也可以写 HTML 标签?
    20 条回复    2017-11-08 20:37:29 +08:00
    ssxn58
        1
    ssxn58  
    OP
       2017-11-08 11:30:43 +08:00
    额……看来第一个问题应该是,怎么在帖子里面贴代码…………
    sonyxperia
        2
    sonyxperia  
       2017-11-08 11:31:35 +08:00
    你这一手大小写着实看晕了我
    holajamc
        3
    holajamc  
       2017-11-08 11:41:33 +08:00
    你这一手大小写着实看晕了我
    JasperYanky
        4
    JasperYanky  
       2017-11-08 11:46:53 +08:00
    你这一手大小写着实看晕了我
    wuyuanyi135
        5
    wuyuanyi135  
       2017-11-08 11:48:47 +08:00
    放到 gist 上吧
    tamlok
        6
    tamlok  
       2017-11-08 11:49:02 +08:00 via Android
    你这一手大小写着实看晕了我
    toono
        7
    toono  
       2017-11-08 12:29:48 +08:00
    你这一手大小写着实看晕了我
    hiluluke
        8
    hiluluke  
       2017-11-08 12:31:12 +08:00
    为啥要大写 J, 有什么用意?
    HelloAmadeus
        9
    HelloAmadeus  
       2017-11-08 12:31:20 +08:00 via Android
    我估摸着,大概是为了强调 d 不发音才这样写吧
    uhayate
        10
    uhayate  
       2017-11-08 12:39:08 +08:00 via iPhone
    看着你这样写我更觉得 d 要发音,仿 jQuery 么
    testcount
        11
    testcount  
       2017-11-08 12:46:28 +08:00
    wizardoz
        12
    wizardoz  
       2017-11-08 12:57:47 +08:00
    @testcount 还是 僵狗 比较接地气
    feifan00x
        13
    feifan00x  
       2017-11-08 13:07:18 +08:00 via iPhone
    你这一手大小写着实看晕了我
    ssxn58
        14
    ssxn58  
    OP
       2017-11-08 13:51:07 +08:00
    昨天才开始学 Django 的,不太了解……望见谅…………
    所以这里是不能贴代码的吗?我贴出来的 HTML 代码直接就给解释了……难道这不是 V2EX 的 BUG ?会不会被有心人给利用了,侵入后台?
    leemove
        15
    leemove  
       2017-11-08 15:21:15 +08:00
    @ssxn58 贴代码要用 MarkDown 的格式,你去搜索下就懂了.
    zzhcoder
        16
    zzhcoder  
       2017-11-08 15:38:22 +08:00
    难道不是 {html_str | safe}
    diydry
        17
    diydry  
       2017-11-08 15:40:19 +08:00
    你这一手大小写着实看晕了我
    shuson
        18
    shuson  
       2017-11-08 15:45:34 +08:00
    Hstar
        19
    Hstar  
       2017-11-08 16:08:33 +08:00
    正经的 django 实现方式是把 names 传给 rander,在模板里循环 name 渲染四个按钮出来.
    [gist 示例]( https://gist.github.com/StarsHu/300690b2a2f52bd1ed55a06b391aec42)
    ssxn58
        20
    ssxn58  
    OP
       2017-11-08 20:37:29 +08:00
    @Hstar 感谢您的回复,这个方法我知道,但是我不仅要遍历,还要在模板里面可以任意调整顺序,例如我可以把 third 放在第一个,second 不显示,把 first 放在最后一个,并且在客户端查看源代码完全不知道 names 里面有 second 存在。其实 names 是数据库里的内容,这里为了方便只是写成了 list。
    今天下午又补了一下 jQuery 的知识点,如果只是布局顺序的话,好像可以通过前端技术来实现,但是隐藏数据库的部分内容,就不能仅仅使用前端技术了吧?
    我本职是写 C 的,看到大段相同、相似的代码,就想抽出来写个函数或者宏,可能有点偏执吧……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3968 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 05:12 · PVG 13:12 · LAX 22:12 · JFK 01:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.