Получить запрос в django?

У меня проблема с django request. Я не знаю. Я пытался сделать все, но я получил У объекта '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')

Затем удалите аргумент "self" из вашей функции messagesblog. Используйте функцию "render" из django.shortcuts и предоставьте контекст с объектами блога:

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

Это может решить вашу проблему. Тем не менее, есть некоторые вещи, которые вы могли бы улучшить. Например: Не используйте поля "id" в определениях модели, если вам это не нужно, так как это обычно автоматически генерируемое числовое поле (BigInt). Это только один совет от старого ветерана Django, который рад, что его наконец-то услышали. Вы сами узнаете гораздо больше по мере продвижения вперед.

Вернуться на верх