【问题标题】:Error: Using the URLconf defined in mysite.urls, Django tried these URL patterns错误:使用 mysite.urls 中定义的 URLconf,Django 尝试了这些 URL 模式
【发布时间】:2018-03-23 11:26:09
【问题描述】:

我正在做“Django by example”的教程“Blog”,但出现错误。 http://127.0.0.1:8000/admin/ 工作正常。我做错了什么?

错误: 找不到页面 (404) 请求方法:GET 请求网址:http://127.0.0.1:8000/post/ 使用 mysite.urls 中定义的 URLconf,Django 按以下顺序尝试了这些 URL 模式: ^管理员/ 当前 URL post/ 与其中任何一个都不匹配。

mysite/blog/urls.py

from django.conf.urls import url
from . import views

urlpatterns = {
    # post views
    url(r'^$', views.post_list, name='post_list'),
    url(r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/'\
        r'(?P<post>[-\w]+)/$',
        views.post_detail,
        name='post_detail'),
}

mysite/blog/views.py

from django.shortcuts import render, get_object_or_404
from .models import Post


def post_list(request):
    posts = Post.published.all()
    return render(request,
                  'blog/post/list.html',
                  {'posts': posts})


def post_detail(request, year, month, day, post):
    post = get_object_or_404(Post, slug=post,
                             status='published',
                             publish__year=year,
                             publish__mounth=month,
                             publish__day=day)
    return render(request,
                  'blog/post/detail.html',
                  {'post': post})

mysite/blog/admin.py

from django.contrib import admin
from .models import Post


class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug', 'author', 'publish', 'status')
    list_filter = ('status', 'created', 'publish', 'author')
    search_fields = ('title', 'body')
    prepopulated_fields = {'slug': ('title',)}
    raw_id_fields = ('author',)
    date_hierarchy = 'publish'
    ordering = ['status', 'publish']

admin.site.register(Post, PostAdmin)

mysite/mysite/urls.py

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

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^blog/', include('blog.urls',
                           namespace='blog',
                           app_name='blog')),
]

我的网站/博客/模型

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse


class Post(models.Model):
    STATUS_CHOICES = {
        ('draft', 'Draft'),
        ('published', 'Published'),
    }
    title = models.CharField(max_length=250)
    slug = models.SlugField(max_length=250,
                            unique_for_date='publish')
    author = models.ForeignKey(User,
                               related_name='blog_posts')
    body = models.TextField()
    publish = models.DateTimeField(default=timezone.now)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    status = models.CharField(max_length=10,
                              choices=STATUS_CHOICES,
                              default='draft')

    def get_absolute_url(self):
        return reverse('blog:post_detail',
            args=[self.publish.year,
            self.publish.strftime('%m'),
            self.publish.strftime('%d'),
            self.slug])

    class Meta:
        ordering =('-publish',)

        def __str__(self):
            return self.title

【问题讨论】:

    标签: django


    【解决方案1】:

    您将博客网址包含在:

    url(r'^blog/', include('blog.urls',
                           namespace='blog',
                           app_name='blog')),
    

    因此你应该去http://127.0.0.1:8000/blog/,而不是http://127.0.0.1:8000/post/来查看你的post_list视图。

    请注意,您应该在博客 URL 中使用列表而不是集合。用方括号替换花括号。

    urlpatterns = [
        ...
    ]
    

    【讨论】:

      【解决方案2】:

      错误意味着您的urls.py 中没有定义/post/ url。

      您应该将您的网址更改为:

      urlpatterns = {
          # post views
          url(r'^post/$', views.post_list, name='post_list'),
          ...
      }
      

      或者,访问/blog/ 的帖子列表。

      我认为第一个版本会是更好的选择。

      希望对你有帮助!

      【讨论】:

      • 我尝试了第一个版本,但它不起作用,仍然出现错误。 “访问 /blog/ 上的帖子列表”是什么意思?
      • @Greg 我的意思是你应该使用`127.0.0.1:8000/blog`而不是`127.0.0.1:8000/post`
      • 还是不行,可能是models和get_absolute_url的问题?我是初学者,所以我可能会犯一些错误
      猜你喜欢
      • 2018-06-28
      • 2020-08-02
      • 2017-05-27
      • 2020-09-01
      • 2021-05-11
      • 1970-01-01
      • 2021-02-20
      • 1970-01-01
      • 2017-06-26
      相关资源
      最近更新 更多