【问题标题】:Easiest way to display Django model data in html在 html 中显示 Django 模型数据的最简单方法
【发布时间】:2021-06-23 20:48:49
【问题描述】:

我有数据存储在 Django 模型中,我想在我的 HTML 文件中显示该数据。我能做到这一点的最简单方法是什么?我熟悉 [this][1] question,但它对我没有帮助,因为它不是很详细,也没有明确的答案。有人可以帮帮我吗?我的代码在下面。


Django 模型:

class userdetails(models.Model):
  donations = models.IntegerField(blank=True, null = True,)
  points = models.IntegerField(blank=True, null = True,)
  user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        blank=True,
        null=True,
    )

我要在其中显示模型数据的 HTML:

<div class="box">
                   <span class="value"> </span>  
                   <span class="parameter">Points</span>
                </div>

这是我的看法:

    @login_required(login_url='/login/')
def dashboard(request):
    id = request.user.id
    data= userdetails.objects.get(id=id)
    return render(request,'dashboard.html',{'data':data})
    

我不断收到的错误:

DoesNotExist at /dashboard/
userdetails matching query does not exist.

在我看来与data= userdetails.objects.get(id=id)有关。

【问题讨论】:

    标签: python django model


    【解决方案1】:

    你需要创建一个视图来从你的模型中检索你需要的数据:

    views.py:

    from .models import userdetails
    from django.shortcuts import render
    
    def get_data(request):
    
        my_data = userdetails.objects.all() #for all the records 
        one_data = userdetails.objects.get(pk=1) # 1 will return the first item change it depending on the data you want 
        context={
           
          'my_data':my_data,
          'one_data':one_data,
        
        } 
    
        return render(request, 'get_data.html', context)
    

    将视图添加到 urls.py :

    url.py:

    from .views import get_data
    
    urlpatterns = [
    
    path('get_data/', get_data, name='get_data'),
    

    ]

    在模板文件夹中创建 get_data.html :

    get_data.html : 用于列表

    {% block content %}
    
    {% for x in my_data %}
    
      {{x.name }}
    {% endfor %}
    
    {% endblock content %}
    

    物品:

     {% block content %}
    
    
    
      {{one_data}}
    
    
    {% endblock content %}
    

    最好的做法是创建一个列表视图和一个详细视图,所以如果你不知道如何告诉我,我会告诉你

    【讨论】:

    • 非常感谢您的详细回答,我现在正在尝试
    • 所以如果我只想在我的 HTML 中显示点,我该怎么做?您的代码显示用户对象
    • @boetis 在循环内: {{x.points }} ,它是 x.your_field_name ,如果你在循环 y 中命名变量(对于 my_data 中的 y)它的 {{y.your_field_name }} , 去文档和搜索模板标签它很容易学习并且有一个有用的模板标签的基调
    • 嘿,我找到了一个更简单的解决方法,但我不断收到一些愚蠢的错误,我将用我的代码更新我的问题,如果你能帮助我解决错误,这应该可以工作跨度>
    • 我试过你的 x 方法,但它没有在我的 html 中显示模型
    【解决方案2】:

    您需要在 views.py 文件中添加一个函数,并将 HTML 文件呈现到 URL 模式中应该存在的 URL。

    例如: 这是一个示例模型:

    class C(models.Model):
        name = models.CharField(max_length=125, null=True)
        phone = models.CharField(max_length=125, null=True)
        date_created = models.DateTimeField(auto_now_add=True, null=True)
    
        def __str__(self):
            return self.name
    

    这是我的观点.py

    from .models import *
    def home(request):
        c = C.objects.all()
    
        return render(request, "<app_name>/index.html", {'c': c})
    

    这是我的 urls.py

    from . import views
    
    urlpatterns = [
        path('home/',views.home),
     ]
    

    这是我将在其中显示数据的 HTML 文件的一部分

    {% block content %}
    <h2>{{c.name}}</h2>
    {% endblock content %}
    

    【讨论】:

    • 非常感谢,但您的代码对我不起作用。
    • 我不想循环遍历模型中的值,我只想显示其中的 1 个
    • 那么你可以像上面例子中的 {{c.name}} 一样使用 {{key.field}}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 2013-03-18
    • 2011-05-20
    • 2013-06-10
    相关资源
    最近更新 更多