解析QueryDict d

2024-04-24 11:49:40 发布

您现在位置:Python中文网/ 问答频道 /正文

对django来说有点陌生,我正在运行python scrip来获取数据,并且喜欢在HTML表标记中显示。Python脚本工作并收集以下数据:

[{'Device': 'device01', 'Port': 'ETH1/5', 'Provider': 'L3', 'ID': 1111, 'Remote': 'ISPCircuit', 'Destination Port': 'ISPPort'}, {'Device': 'device02', 'Port': 'ETH1/5', 'Provider': 'L3', 'ID': 2222, 'Remote': 'ISPCircuit', 'Destination Port': 'ISPPort'}]

当在视图.py,我将输出存储在以下位置:

if form.is_valid():
    ## Python script GatherData file
    output = gatherdata(location)
data = QueryDict(output, mutable=True)
## Dict format to fetch
context = {'location': location, 'data': data }

使用QueryDict的原因是python的输出作为data添加了字符串,例如:

{'location': 'DC1', 'data': b"[{'Device': ... '}]\n"} 

无法从data获取数据 以下是使用QueryDict的输出,如下所示:

<QueryDict: {"[{'Device': 'device01', 'Port': 'ETH1/5', 'Provider': 'L3', 'ID': 1111, 'Remote': 'ISPCircuit', 'Destination Port': 'ISPPort'}, {'Device': 'device02', 'Port': 'ETH1/5', 'Provider': 'L3', 'ID': 2222, 'Remote': 'ISPCircuit', 'Destination Port': 'ISPPort'}]\n": ['']}>

上面解释了如何将给定数据中的值解析为html模板

以上,谢谢您的意见和建议。你知道吗

我试过了,json.loads文件(输出)但通过错误。我试过data = literal_eval(context['data'])删除字符串。你知道吗

我已经更新了下面的建议,为了通过HTML呈现,我已经累了,但是没有得到任何数据

      <tbody>
        {% for i in qd %}
            <tr class='clickable-row' data-href='/details/'>
              {% if i == "Device" %}
                {% for v in qd.i %}
                <td>{{ v }}</td>
                {% endfor %}
            </tr>
            {% endif %}
        {% endfor %}
      </tbody>

Tags: 数据iddataremoteportdevicehtmllocation
2条回答

我能够获取数据,并能够通过html呈现显示。不必使用qd = QueryDict(mutable=True),只需使用response = response.decode()即可解决问题。至于html,我们能够使用FOR循环.items()来获取数据。谢谢大家的意见。你知道吗

这是Python对象的表示。您可以使用ast.literal_eval(..)将其转换为其Python等价物,然后通过迭代列表来更新QueryDict。比如:

from ast import literal_eval
from django.http import QueryDict

response = "[{'Device': 'device01', 'Port': 'ETH1/5', 'Provider': 'L3', 'ID': 1111, 'Remote': 'ISPCircuit', 'Destination Port': 'ISPPort'}, {'Device': 'device02', 'Port': 'ETH1/5', 'Provider': 'L3', 'ID': 2222, 'Remote': 'ISPCircuit', 'Destination Port': 'ISPPort'}]"
data = literal_eval(response)
qd = QueryDict(mutable=True)
for item in data:
    qd.update(item)

如果responsebytes,则可以首先将其解码为字符串:

from ast import literal_eval
from django.http import QueryDict

response = b"[{'Device': 'device01', 'Port': 'ETH1/5', 'Provider': 'L3', 'ID': 1111, 'Remote': 'ISPCircuit', 'Destination Port': 'ISPPort'}, {'Device': 'device02', 'Port': 'ETH1/5', 'Provider': 'L3', 'ID': 2222, 'Remote': 'ISPCircuit', 'Destination Port': 'ISPPort'}]"
response = response.decode()
data = literal_eval(response)
qd = QueryDict(mutable=True)
for item in data:
    qd.update(item)

最后,我们得到以下QueryDict

>>> qd
<QueryDict: {'Device': ['device01', 'device02'], 'Port': ['ETH1/5', 'ETH1/5'], 'Provider': ['L3', 'L3'], 'ID': [1111, 2222], 'Remote': ['ISPCircuit', 'ISPCircuit'], 'Destination Port': ['ISPPort', 'ISPPort']}>

但是你可能不想把它转换成QueryDict。这只是一个词典列表。每个字典都包含一个'Device''Port'Provider'ID键。因此,您可能只需要使用for循环来处理字典。你知道吗

相关问题 更多 >