【发布时间】:2019-11-14 22:01:51
【问题描述】:
1- 标题链接失效。当我点击链接时,它会停留在同一页面上。
2- 创建帖子不起作用。当我按下提交按钮时出现此错误。
错误消息:/post/create/ 处的 AttributeError
'Post' 对象没有属性 'get_absolute_url'
urls.py
from django.urls import path
from .import views
app_name='post'
urlpatterns = [
path('index/',views.post_index, name='index'),
path('<int:id>/detail',views.post_detail, name='detail'),
path('create/',views.post_create, name='create'),
path('<int:id>/update/',views.post_update, name='update'),
path('delete/',views.post_delete, name='delete'),
]
models.py
from django.db import models
from django.urls import reverse
# Create your models here.
class Post(models.Model):
title = models.CharField(max_length=120, verbose_name="Başlık")
content = models.TextField(verbose_name="İçerik")
publishing_date = models.DateTimeField(verbose_name="Yayımlanma Tarihi", auto_now_add=True)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post:detail', kwargs={'id': self.id})
#return "/post/{}".format(self.id)
views.py
from django.shortcuts import render, get_object_or_404, HttpResponseRedirect
from django.http import HttpResponse
from .models import Post
from .forms import PostForm
def post_index(request):
posts = Post.objects.all()
return render(request, 'post/index.html', {'posts': posts})
def post_detail(request, id):
post = get_object_or_404(Post, id=id)
context = {
'post': post,
}
return render(request, 'post/detail.html', context)
def post_create(request):
#if request.method == "POST":
#print(request.POST)
#title = request.POST.get('title')
#content = request.POST.get('content')
#Post.objects.create(title=title, content=content)
#if request.method == "POST":
#Formdan gelen bilgileri kaydet
#form = PostForm(request.POST)
#if form.is_valid():
#form.save()
#else:
#Formu kullanıcıya göster
#form = PostForm()
form = PostForm(request.POST or None)
if form.is_valid():
post = form.save()
return HttpResponseRedirect(post.get_absolute_url())
context = {
'form': form,
}
return render(request, 'post/form.html', context)
def post_update(request, id):
post = get_object_or_404(Post, id=id)
form = PostForm(request.POST or None, instance=post)
if form.is_valid():
form.save()
return HttpResponseRedirect(post.get_absolute_url())
context = {
'form': form,
}
return render(request, 'post/form.html', context)
def post_delete(request):
return HttpResponse("Burası Post delete sayfası")
index.html
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
{% for post in posts %}
{{post.id}}<br>
<a href="{{post.get_absolute_url}}">{{post.title}}</a><br>
{{post.content}}<br>
{{post.publishing_date}}<br>
{% endfor %}
</body>
</html>
创建帖子表单:
forms.py
from django import forms
from .models import Post
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = [
'title',
'content',
]
form.html
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form method="POST">
{% csrf_token %}
<h1>Form</h1>
{{form.as_p}}
<input type="submit" value="Gönder">
</form>
</body>
</html>
【问题讨论】: