Получить запрос в 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, который рад, что его наконец-то услышали. Вы сами узнаете гораздо больше по мере продвижения вперед.