【问题标题】:Django get_absoute_url issues?Django get_absolute_url 问题?
【发布时间】: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>

【问题讨论】:

    标签: python django


    【解决方案1】:

    您的 Post 模型存在识别问题

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      • 2019-04-27
      • 2015-07-01
      相关资源
      最近更新 更多