【问题标题】:How to retrieve data in the template from a custom MariaDB connector? (Django)如何从自定义 MariaDB 连接器检索模板中的数据? (姜戈)
【发布时间】:2021-04-16 06:46:49
【问题描述】:

我按照 MariaDB 文档实现了以下连接器。 Documentation

这是我的 db.py:

#!/usr/bin/python 
import mariadb 

conn = mariadb.connect(
    user="user",
    password="",
    host="localhost",
    database="db")
cur = conn.cursor() 
    
def get_some_data():
    cur.execute("SELECT some_id FROM `db`.some_data")
    sid = []
    for some_id in cur: 
        sid.append(some_id)
    return sid

conn.close()

到目前为止一切都清楚了,我不清楚的是...如何在 html 中选择一个列表,其中包含从查询中获得的值到我的 django 网页上的数据库?

我应该在views.py 中创建一个函数并让它返回类似这样的内容吗?:

from db import get_some_data
def retrieve_from_db(request):
   #some code here
   return render(request, 'index.html', context)

我需要context吗?

假设我的index.html如下,我怎么能从模板中调用retrieve_from_db(request)并让这个函数调用get_some_data()并在网络上显示这个信息?

index.html

    {% extends "../base.html" %}
    {% load static %}
    {% load bootstrap4 %}
    {% block content %}
    {% bootstrap_javascript %}
    //Some form to retrieve the data from the .py scripts
    <form id="retrieve_db" action="someaction?" method="post">
      <div class="form-group">
        {% someforloop? %}
        <select name="myIdList" id="myIdList">
          <option value="{{ some_id }}">{{ some_id }}</option>
        </select>
        {% endforloop %}
      </div>
    </form>
    {% endblock %}

假设我希望将值显示在列表中:myIdList

我想我分别理解了这些概念,但我需要知道如何连接拼图的各个部分。

如果有人可以帮助我了解如何实施整个周期的“骨架”,那将是非常有帮助的。

【问题讨论】:

    标签: python django django-views django-templates


    【解决方案1】:

    看起来你已经朝着正确的方向前进了。 将数据放入上下文变量中,并将其传递给带有请求和模板名称的渲染方法。

    from db import get_some_data
    
    
    def retrieve_from_db(request):
       some_ids = get_some_data()
       context = {'some_ids': some_ids}
       return render(request, 'index.html', context)
    

    现在在模板中遍历您的 ID:

     <div class="form-group">
         {% for some_id in some_ids %}
            <select name="myIdList" id="myIdList">
              <option value="{{ some_id }}">{{ some_id }}</option>
            </select>
         {% endfor %}
      </div>
    

    至于从模板调用函数 - 如果你描述它似乎不需要,但一般你不能从模板调用函数,但可以使用template tag。使用它,您只需将请求传递给它(您需要先将其添加到上下文中)并在模板中获取结果。

    【讨论】:

    • 我试过你的代码,但它不起作用。我必须将选择放在
      中还是没有必要?
    • 这取决于究竟是什么不工作?
    • 如果我把它放在一个表单中就可以了,当用户访问 index.html 时是否可以自动检索数据而不执行任何操作,比如按下提交按钮? Show 自动从函数中检索数据并显示出来。
    猜你喜欢
    • 2021-08-19
    • 2019-01-29
    • 2020-03-25
    • 2011-08-23
    • 2016-08-13
    • 2011-05-13
    • 2012-10-25
    • 2021-08-11
    • 1970-01-01
    相关资源
    最近更新 更多