fanne
V2EX  ›  Django

Django ajax 中如何使用 jinja2 的标签

  •  
  •   fanne · Nov 18, 2018 · 4877 views
    This topic created in 2915 days ago, the information mentioned may be changed or developed.

    我有个作孽的功能,联动查询

    FS1MM4.png

    下拉选择服务器之后,把所符合的内容查询出来,通过 ajax 回填回去

    FS1lL9.png

    其中 ajax 代码

    $('#group_id').change(function () {
                var group_id = $("#group_id").val();
                $.ajax({
                    data: {'group_id': group_id, csrfmiddlewaretoken: '{{ csrf_token }}'},
                    type: 'POST',
                    url: '/pro1/gamebuild/' + group_id + '/',
                    success: function (data) {
                        var json_data = JSON.parse(data);
                        var content = '';
                        $.each(json_data, function (i, item) {
                            content += ' <tr> <td>' + item.groupname + '</td> ' +
                                '<td>' + item.game_name + '</td>  ' +
                                '<td><div class="font-bold">' +
                                '<button class="btn btn-info" action_id="' + item.id + '" version_value="trunk" game_name=' + item.game_name + ' groupname=' + item.groupname + ' type="button" onclick="BuildFun(this)">' +
                                ' <i class="fa fa-paste"></i>' + item.version+'</button>'+
                                '</div></td></tr>'
                        });
                        $("#ossfile-tab-body").html(content)
                    }
    
                })
            });
    
    content 这里就是回填的

    那我现在想要在这里里面添加 jinja2 的语法,试了几种都不行的

    {%if xxx %}{% endif %}

    类似这样的,但都没法生效

    content += ' <tr> <td>' + item.groupname + '</td> ' +
    '<td>' + item.game_name + '</td>  ' +
    '<td><div class="font-bold">' +
    '<button class="btn btn-info" action_id="' + item.id + '" version_value="trunk" game_name=' + item.game_name + ' groupname=' + item.groupname + ' type="button" onclick="BuildFun(this)">' +
    ' <i class="fa fa-paste"></i>' + {% if item.version == "trunk" %}item.version {% elif item.version == "branch" %}ddd{% endif %}+'</button>'+
    '</div></td></tr>'
    

    FS1tJK.png

    像这种的应该怎么写法。

    18 replies  •  2018-11-19 14:00:26 +08:00
    Trim21
    Trim21
    Nov 18, 2018
    1
    item 是个 js 变量, 你只能用 js 拼接, 没法用 jinja
    if 后面的 item 是 jinja 传进去的 context, 而不是你函数参数里面的那个 item
    fanne
    fanne
    OP
    Nov 18, 2018
    2
    @Trim21 #1 那要做判断,有解么?
    Trim21
    Trim21
    Nov 18, 2018
    3
    @fanne 直接用 js 的 if 语句啊...
    fanne
    fanne
    OP
    Nov 18, 2018
    4
    @Trim21 #3 我现在用 js 的 if 语法

    content += ' <tr> <td>' + item.groupname + '</td> ' +
    '<td>' + item.game_name + '</td> ' +
    '<td><div class="font-bold">' +
    '<button if ('+item.status +'== 1) {disabled="disabled"} class="btn btn-info" action_id="' + item.id + '" version_value='+ item.version+' game_name=' + item.game_name + ' groupname=' + item.groupname + ' type="button" onclick="BuildFun(this)">' +
    ' <i class="fa fa-paste"></i>' +item.version +'</button>'+
    '</div></td></tr>'

    item.status typeof 打印出来的类型是 number 的,数据库中有值为 1 的,但貌似没有起作用。
    Trim21
    Trim21
    Nov 18, 2018
    5
    @fanne #4 ...我不是这个意思...
    你会 js 吗... 建议先看看 javascript
    Trim21
    Trim21
    Nov 18, 2018
    6
    你这里的 item 是在 jinja2 渲染完模板,在浏览器运行这段 js 代码的时候才会创建的一个变量。
    所以对 item 属性的判断只能用 js 而不能用 jinja。
    你虽然是在修改模板,但这里实际上是在修改会在用户浏览器运行的 js 代码,所以这里写的是纯粹的 js 代码,不能用
    <button if ('+item.status +'== 1) {disabled="disabled"}
    这样看起来像是模板语句的写法。 应该是
    '<button ' + item.status == 1 ? "disabled " : '' + 'class="btn btn-info"'
    fanne
    fanne
    OP
    Nov 18, 2018
    7
    @Trim21 #5 了解一些,不是很熟,我查了,大致是这样的,所以才有上面的写法。

    if (条件)
    {
    只有当条件为 true 时执行的代码
    }

    现在其他的都搞完了,就一个 item.status 状态判断为 1,那 button 的状态为 disabled,不可点击,卡了我一个周末了

    大佬,能否基于这个帮忙搞一下。
    Trim21
    Trim21
    Nov 18, 2018
    8
    @fanne #7 看六楼
    fanne
    fanne
    OP
    Nov 18, 2018
    9
    回复提示 有外链
    贴图片


    页面错乱了

    fanne
    fanne
    OP
    Nov 18, 2018
    10
    @Trim21 #8 9 楼,忘记 @了
    Trim21
    Trim21
    Nov 18, 2018
    11
    @fanne #10 字符串拼接错了吧......
    你还是先看看 js 吧- - 就是字符串拼接和三元运算符
    fanne
    fanne
    OP
    Nov 19, 2018
    12
    @Trim21 #11 用了一个更简单粗暴的




    不过显示有点问题,功能倒是完成了。。。。多谢哈🙏,js 的还需要研究研究
    ticotico
    ticotico
    Nov 19, 2018 via Android
    13
    搜一下 varbatim ?
    sunshengkai27
    sunshengkai27
    Nov 19, 2018
    14
    #13 +1, 同时使用 js_render 代码要好看的多
    fanne
    fanne
    OP
    Nov 19, 2018
    15
    @ticotico #13 这是啥,搜了一下,好像没看到相关内容的。
    fanne
    fanne
    OP
    Nov 19, 2018
    16
    @sunshengkai27 #14 这个是 vue 的用法么
    fanne
    fanne
    OP
    Nov 19, 2018
    17




    这样就正常了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4872 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 61ms · UTC 03:22 · PVG 11:22 · LAX 19:22 · JFK 22:22
    ♥ Do have faith in what you're doing.