【问题标题】:Django /admin/ Page not found (404)找不到 Django /admin/ 页面 (404)
【发布时间】:2017-02-09 20:44:50
【问题描述】:

我有以下错误:

Page not found (404)
Request Method:     GET
Request URL:    http://127.0.0.1:8000/admin/
Raised by:  nw.views.post_detail

但是我可以输入http://127.0.0.1:8000/admin/nw/的例子

如果我删除所有post_detail 函数/部分代码,那么我可以输入http://127.0.0.1:8000/admin/ 并且它可以工作,所以这个post_detail 有问题。

nw.views.post_detail:

def post_detail(request, slug=None):
    instance = get_object_or_404(Post, slug=slug)

    context = {
        "instance": instance,
    }
    return render(request, "post_detail.html", context)

urls.py:

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

urlpatterns = [
    url(r'^$', post_list, name='list'),
    url(r'^create/$', post_create),
    url(r'^(?P<slug>[\w-]+)/$', post_detail, name='detail'),
    url(r'^(?P<slug>[\w-]+)/edit/$', post_update, name='update'),
    url(r'^(?P<slug>[\w-]+)/delete/$', post_delete),
]

post_detail.html:

{% extends 'base.html' %}

{% block head_title %}{{ instance.title }} | {{ block.super }}{% endblock head_title %}

{% block content %}
    <div class="instance">
        <h1>{{ instance.title }}</h1>
        <div class="date">{{ instance.published }}</div>
        <p>{{ instance.text|linebreaksbr }}</p>

        <a href="https://www.facebook.com/sharer/sharer.php?u={{ request.build_absolute_uri }}">
        Facebook
        </a>

        <a href="https://twitter.com/home?status={{ share_string }}%20{{ request.build_absolute_uri }}">
        Twitter
        </a>

        <a href='https://plus.google.com/share?url={{ request.build_absolute_uri }}'>google</a>


        <a href="https://www.linkedin.com/shareArticle?mini=true&url={{ request.build_absolute_uri }}&title={{ instance.title }}&summary={{ share_string }}&source={{ request.build_absolute_uri }}">
        Linkedin
        </a>

        <a href="http://www.reddit.com/submit?url={{ request.build_absolute_uri }}&title={{ share_string }}.">Reddit</a>

    </div>

{% endblock %}

models.py:

class Post(models.Model):
    author = models.ForeignKey('auth.User', default=1)
    title = models.CharField(max_length=200)
    slug = models.SlugField(unique=True)
    text = models.TextField()
    published = models.DateTimeField(auto_now=False, auto_now_add=True)
    updated = models.DateTimeField(auto_now=True, auto_now_add=False)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse("posts:detail", kwargs={"slug": self.slug})

    class Meta:
        ordering = ["-published"]


def create_slug(instance, new_slug=None):
    slug = slugify(instance.title)
    if new_slug is not None:
        slug = new_slug
    qs = Post.objects.filter(slug=slug).order_by("-id")
    exists = qs.exists()
    if exists:
        new_slug = "%s-%s" %(slug, qs.first().id)
        return create_slug(instance, new_slug=new_slug)
    return slug


def pre_save_post_receiver(sender, instance, *args, **kwargs):
    if not instance.slug:
        instance.slug = create_slug(instance)


pre_save.connect(pre_save_post_receiver, sender=Post)

【问题讨论】:

标签: python django


【解决方案1】:

admin url 应该放在第一位:

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

否则,它将被您的帖子应用 urlpatterns 中的另一个匹配正则表达式拦截,即:

url(r'^(?P<slug>[\w-]+)/$', post_detail, name='detail'),

根据经验,请始终将管理 URL 保留在项目 urlpatterns 的顶部

【讨论】:

    【解决方案2】:

    在你的情况下,这条路线工作url(r'^(?P&lt;slug&gt;[\w-]+)/$', post_detail, name='detail'),,这个函数称为instance = get_object_or_404(Post, slug=slug)

    你可以这样替换路由

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

    路线顺序很重要

    【讨论】:

      猜你喜欢
      • 2011-05-09
      • 2016-08-01
      • 2016-08-01
      • 2015-10-22
      • 2014-03-20
      • 2020-10-27
      • 2019-07-21
      • 1970-01-01
      • 2016-03-31
      相关资源
      最近更新 更多