【问题标题】:Errors with django urlsdjango url 错误
【发布时间】:2018-04-20 08:24:32
【问题描述】:

单击 django 上的链接时出现错误 404,我花了很多时间试图查看我做错了什么,但没有运气。

这是我的 index.html

<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>

<h1>{{title}}</h1>

{% for obj in object_list %}
{% url "detail" id=obj.id %}
<a href = '{{obj.get_absolute_url}}'> {{obj.title}}</a><br/>
{{obj.content}} <br/>
{{obj.timestamp}} <br/>
{{obj.updated}} <br/>
{{obj.id}} <br/>


{% endfor %}    
</body>
</html>

这是我的 urls.py

from django.conf.urls import url
from django.contrib import admin

from .views import (
    post_list,
    post_create,
    post_detail,
    post_update,
    post_delete,
    )

urlpatterns = [
    url(r'^$', post_list),
    url(r'^create/$', post_create),
    url(r'^detail/(?P<id>\d+)/$', post_detail, name='detail'),
    url(r'^update/$', post_update),
    url(r'^delete/$', post_delete),

]

这是我的观点.py

from django.http import HttpResponse
from django.shortcuts import render, get_object_or_404

from .models import Post

# Create your views here.

def post_create(request):
    return HttpResponse("<h1>Create</h1>")

def post_detail(request, id): # retreive
    instance = get_object_or_404(Post, id=id)
    context = {
        "title": instance.title,
        "instance": instance,
    }
    return render(request, "post_detail.html", context) 

def post_list(request): # list of posts
    queryset = Post.objects.all
    context = {
        "title": "List",
        "object_list": queryset,
    }
    return render(request, "index.html", context) 

def post_update(request):
    return HttpResponse("<h1>Update</h1>")  

def post_delete(request):
    return HttpResponse("<h1>Delete</h1>")    

这是我的models.py

from __future__ import unicode_literals

from django.db import models

# Create your models here.
class Post(models.Model):
    title = models.CharField(max_length = 120)
    content = models.TextField()
    updated = models.DateTimeField(auto_now=True, auto_now_add = False )
    timestamp = models.DateTimeField(auto_now=False, auto_now_add = True )

    def __unicode__(self):
        return self.title


    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return "/posts/%s" %(self.id)

【问题讨论】:

  • 为什么不使用'{% url "detail" id=obj.id %}' 作为您的href
  • 这似乎有效,但我不知道为什么
  • 据我所知,这是在您的模板中连接视图的标准方法,我不太了解您试图以另一种方式实现的目标。很高兴它虽然有效!也许阅读模板标签文档,或者如果您有充分的理由想要以另一种方式做,请尝试重新表述您的问题。
  • 我在网上学习教程,而导师就是这样做的。但不幸的是,它对我不起作用。花这么多时间试图找出问题所在。

标签: python django django-models django-templates django-views


【解决方案1】:

您的 get_absolute_url 方法以 /posts/&lt;id&gt; 的形式返回 URL,但您的 urlconf 需要 /posts/detail/&lt;id&gt;

您应该使用 reverse 功能,而不是在方法中硬编码这样的 URL:

from django.urls import reverse
...
def get_absolute_url(self):
    return reverse('detail', kwargs={'id': self.id})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-02
    • 2017-03-14
    • 1970-01-01
    • 2017-04-14
    • 2016-11-03
    • 2013-04-12
    • 2011-08-05
    相关资源
    最近更新 更多