Django显示来自GET请求的数据

时间:2017-01-26 19:01:08

标签: python django response jinja2

我们假设我有一个GET请求,下面的代码显示了请求的格式

示例:

/?title1=xxx&message1=xxx&file1=xxx&...&titleN=xxx&messageN=xxx&fileN=xxx

enter image description here

上面的示例显示GET请求中的数据。

我如何遍历GET请求列表并显示每个请求N'在它自己的div。

当然这是使用jinja模板和django。

我实际上找到了一个只显示两个参数的解决方案。

{% for key, value in GET.items %}
        {% if forloop.counter0|divisibleby:2 %}
                {% include "title_snippet.html" with title=value %}
        {% else %}
                {%  include "message_snippet.html" with message=value %}
        {% endif %}

{% endfor %}

此解决方案仅显示两个参数的数据。但我希望它适用于N个参数。

?titre1=titre1&?message1=message1&?titre2=titre2&?message2=message2

2 个答案:

答案 0 :(得分:2)

我不认为这在模板方面很容易解决。渲染模板时需要设置一些逻辑。

在控制器端。

def myview(request):
    values = []
    for key, value in request.GET.items():
        if key.startswith("title"):
            product = {}
            index_value = key.replace("title","")
            product["title"] = key
            if request.GET.get("message"+index_value):
                product["message"] = request.GET["message"+index_value]
                values.append(product)

    return render_to_response("template.html", {"all_values":values})

在您的模板方面类似

{% for value in all_values %}
    <div >
         {% include "title_snippet.html" with title=value.title %}
         {%  include "message_snippet.html" with message=value.message %}
    </div>
{% endfor %}

答案 1 :(得分:1)

解决此问题的一种方法是使用正则表达式在views.py和模板方面的可迭代字典中对请求参数进行排序

    msg.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            //here you will get the state of edittext before a change took place
        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            // here is the best place to check the length of the valu form edit text on the go.
            // check whether the length is greater than 15
            // and if yes send to server.
            //[ MAY BE A BOOLEAN FLAG CAN MAKE YOUR JOB MUCH EASIER]
            // Else you can show the error message

            if(msg.getText().length()>15){
                VALID_MESSAGE = true;
            }
            else{
                msg.setError("Enter valid Message");
                VALID_MESSAGE = false;
            }
        }

        @Override
        public void afterTextChanged(Editable editable) {


        }
    });