在 Django 中获取请求?

get request in django?

我对 django 有疑问 request.I 不知道。我试图做所有的事情,但我得到了 'blog' 对象没有属性 'get'。我想在我的网站上做迷你博客,但它现在不工作。我想从数据库中获取所有对象。(抱歉,如果我做错了什么,我是 django 的初学者并尝试为我的网站运行):)

models.py

from django.db import models

# Create your models here.

CHOOSE =[
    ('Usual','Обычный тариф'),
    ('Premium','Премиум тариф'),
    ('Prise','Аукционный')
]


class VDSTARIFS( models.Model):
    id = models.CharField(max_length=40, primary_key= True,serialize=True)
    name = models.CharField(max_length=20, verbose_name = 'Цены')
    choosen = models.CharField(max_length= 20, choices = CHOOSE, verbose_name = 'Тариф', help_text='Выбор тарифного плана.')
    title = models.CharField(max_length= 15)
   
   
    def __str__(self):
        return str(self.title)

class blog(models.Model):
    id = models.CharField(max_length=40, primary_key= True,serialize=True)
    message = models.TextField( verbose_name= 'Сообщение блога')
    titleblog = models.CharField(max_length=50, verbose_name = 'Название')
    img = models.ImageField(upload_to = 'admin/', verbose_name= 'Картинка' )


    def __str__(self):
        return str(self.titleblog)
    
    def get_all_objects(self):  ##maybe I have troubles with it.
        queryset = self.__class__.objects.all()
        

blog.html

{% csrftoken %}
{% for item in message %}

{% endfor %}

views.py

from django.shortcuts import render
from django.http import HttpResponse
from django.shortcuts import render
from django.http import HttpResponseRedirect
import os
from polls.models import VDSTARIFS
from polls.models import blog
from django.template.loader import render_to_string
def index_view(request):
    #return HttpResponse("<h1>Hello</h1>")
     return render(request, "home.html", {})
def about(request):
     return render(request, "about.html", {})
def minecraft(request):
     return render(request, "minecraft.html",{})

def vds(request):
    HTML_STRING = render_to_string("vds.html", context = context1)
    return HttpResponse(HTML_STRING)
try:
    VDS1 = VDSTARIFS.objects.get(id=0)
    name = VDS1.name
except VDSTARIFS.DoesNotExist:
    VDS1 = None
context1 = {
    'name':name,
    'prise':VDS1,
}

def messagesblog(request,self): 
    HTML_STRING = render_to_string('blog.html')
    return HttpResponse(HTML_STRING)

urls.py

from django.contrib import admin
from django.urls import path
from polls import views
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index_view, name='home'),
    path('vds', views.vds, name='vds' ),
    path('minecraft', views.minecraft, name='minecraft' ),
    path('about', views.about, name='about'),
    path('blog', views.blog, name='blog')
]

实际错误可能是url模式错误造成的:

path('blog', views.blog, name='blog')

views.blog 引用博客模型由于:

from polls.models import blog

这里你需要的是视图而不是模型,所以:

path('blog', views.messagesblog, name='blog')

然后,从您的 messagesblog 函数中删除“self”参数。 使用 django.shortcuts 中的“呈现”功能并提供博客对象的上下文:

def messagesblog(request):
    return render(request, "blog.html", {message: blog.objects.all()})

这可能会解决您的问题。 不过,有些事情您可以改进。 例如:如果您真的不需要,请不要在您的模型定义中使用“id”字段,因为这通常是一个 auto-generated 数字 (BigInt) 字段。 这只是来自老 Django 老手的一个提示,他很高兴终于被听到了。随着您的继续,您自己会发现更多。