【问题标题】:fetching data from django models从 django 模型中获取数据
【发布时间】:2020-09-19 02:27:42
【问题描述】:

我是 Django 的新手。我使用 Django 模型创建了一个表,并使用 python shell 插入了一个对象。当我在 Django 模板上使用对象 id 访问对象时,我得到的结果是“{{obj.id}}-{{obj.content}}”,而不是实际的数据值。

views.py 文件

from django.shortcuts import render
from django.http import HttpResponse, Http404
from .models import Tweet


# Create your views here.
def home_view(request, *args, **kwargs):
    return HttpResponse("<h1>Hello World!<h1>")

def tweet_detail_view(request, tweet_id, *args, **kwargs):
    try:
        obj = Tweet.objects.get(id = tweet_id)
    except:
        raise Http404
    return HttpResponse("<h1>Hello {{obj.id}} - {{obj.content}}</h1>")

models.py 文件

from django.db import models

# Create your models here.
class Tweet(models.Model):
    content = models.TextField(blank=True, null=True)
    image = models.FileField(upload_to='images/', blank=True, null=True)

urls.py 文件

from django.contrib import admin
from django.urls import path
from tweets import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.home_view),
    path('tweet/<int:tweet_id>', views.tweet_detail_view),
]

贝壳

(base) ankita@ankita-HP-Laptop-15-bs0xx:~/dev/trydjango/tweetme$ ./manage.py shell
Python 3.7.4 (default, Aug 13 2019, 20:35:49) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.8.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from tweets.models import Tweet                                        

In [2]: obj = Tweet.objects.get(id = 1)                                        

In [3]: obj                                                                    
Out[3]: <Tweet: Tweet object (1)>

In [4]: obj.content                                                            
Out[4]: 'Hello World!'

In [5]: obj.id                                                                 
Out[5]: 1

本地主机页面只有下一个文本:

你好 {{obj.id}} - {{obj.content}}

【问题讨论】:

    标签: python django django-models django-templates django-database


    【解决方案1】:

    如果你创建模板来渲染你的页面,这个任务很容易实现。那么,为什么不创建模板并使用 render 进行渲染呢?

    hello_word.html

    <html>
        <body>    
            <h1>Hello {{obj.id}} - {{obj.content}}</h1>
        </html>
    </body>
    

    views.py

    而不是 HttpResponse:

    return render(request, 'hello_world.html', {'obj': obj})
    

    我会说这是呈现模板的常规 Django 方式。

    【讨论】:

    • 谢谢,它成功了。但我仍然很好奇为什么它不能与“HttpResponse()”一起使用
    • 老实说,我不是 100% 确定,但我相信 HttpResponse() 是在不使用模板的情况下从视图进行 http 响应的快捷方式。双括号中的变量是模板处理器在渲染模板时用真实数据替换的模式。我相信使用 HttpResponse() 进行渲染时不涉及模板。
    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 2022-11-27
    • 1970-01-01
    • 2018-04-17
    • 2020-07-26
    • 2021-08-11
    相关资源
    最近更新 更多