首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用URL Python Django

如何使用URL Python Django
EN

Stack Overflow用户
提问于 2020-04-18 15:01:37
回答 2查看 64关注 0票数 0

我正试图用Antonio的书“"Example_Build_powerful_and_reliable_Python_web_applications”“学习Python。真的很抱歉回答了一些愚蠢的问题,但我是个新手。对不起,我的英语不是我的母语。

书中的一个例子有一些问题。做同样的事情,在书中,但URL的不工作。

MODELS.PY

代码语言:javascript
运行
复制
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.urls import reverse

class PublishedManager(models.Manager):
    def get_queryset(self):
        return super(PublishedManager, self).get_queryset().filter(status='published')

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')
    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')
    objects = models.Manager()
    published = PublishedManager()

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

def __str__(self):
    return self.title

def get_absolute_url(self):
    return reverse('blog:post_detail',
                    args=[self.publish.year,
                    self.publish.month,
                    self.day, self.slug])

VIEWS.PY

代码语言:javascript
运行
复制
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, post):
    post = get_object_or_404(Post, slug = post)
    return render(request, 'blog/post/detail.html', {'post': post})

URLS.PY

代码语言:javascript
运行
复制
from django.urls import path
from . import views

app_name ='blog'

urlpatterns = [
 path('', views.post_list, name='post_list'),
 path('<int:year>/<int:month>/<int:day>/<slug:post>/',
 views.post_detail,
 name='post_detail'),
]

BASE.HTML

代码语言:javascript
运行
复制
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>{% block title %} {% endblock %}</title>
  </head>
  <body>
    <div id="content">
      {% block content %}
      {% endblock %}
    </div>
    <div id="sidebar">
      <h2>My Blog</h2>
      <p>This is my blog</p>
    </div>
  </body>
</html>

LIST.HTML

代码语言:javascript
运行
复制
{% extends "blog/base.html" %}

{% block title %}My blog{% endblock%}

{% block content %}
  <h1>My Blog</h1>
    {% for post in posts %}
      <h2>
        <a href="{{ post.get_absolute_url }}">
          {{post.title}}
        </a>
      </h2>
      <p class="date">
        Published {{ post.publish }} by {{ post.author }}
      </p>
        {{ post.body|truncatewords:30|linebreaks }}
      {% endfor %}
    {% endblock %}

DETAIL.HTML

代码语言:javascript
运行
复制
{% extends "blog/base.html" %}

{% block title %} {{ post.title }} {% endblock %}

{% block content %}
  <h1> {{ post.title }} </h1>
  <p class = "date">
    Published {{ post.publish }} by {{ post.author }}
  </p>
    {{ post.body|linebreaks }}
  {% endblock %}

还将我的urls添加到这里的URLS:在这里输入图像描述

问题是:当我点击BASE.HTML页面上的帖子时,我没有看到正确的URL,什么也没有发生:在这里输入图像描述真的打破了我的大脑。提前谢谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2020-04-18 15:17:36

您的VIEWS.py应该包含方法post(self,request)或get(self,request),以便从呈现的HTML中调用。方法post_list(..)或post_detail(.)在Django框架上不能调用。

票数 0
EN

Stack Overflow用户

发布于 2020-04-19 13:32:02

哦,我的f...ng上帝。

如果有人会面临同样的问题。

In MODELS.PY只需移动类Meta和2 defs:

代码语言:javascript
运行
复制
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.urls import reverse

class PublishedManager(models.Manager):
    def get_queryset(self):
        return super(PublishedManager, self).get_queryset().filter(status='published')

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')
    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')
    objects = models.Manager()
    published = PublishedManager()

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

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('blog:post_detail',
                    args=[self.publish.year,
                    self.publish.month,
                    self.day, self.slug])

然后在威尔工作很好。非常愚蠢的错误,很难找到这个。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61291283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档