看了网站后尝试使用Django2,但对于无法成功的人来说

首先

在这个网站上学习了Django的引入后,我总结了自己在我的环境中遇到的两个问题,希望能够让初学者更容易理解Python的Web应用程序(Django)。

开发环境

操作系统:macOS High Sierra(10.13)

$ python3 -V
Python 3.6.5 :: Anaconda, Inc.
django.get_version()
'2.1.1'

创建模型

from django.db import models
from django.utils import timezone

class Post(models.Model):
    author = models.ForeignKey('auth.User')
    title  = models.CharField(max_length=200)
    text   = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField(blank=True, null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title

据称,在Django2之后会出现以下错误。

TypeError: __init__() missing 1 required positional argument: 'on_delete'

所以,让我们进行以下修改。
我们添加了on_delete。

from django.db import models
from django.utils import timezone

class Post(models.Model):
    author = models.ForeignKey("auth.User", on_delete=models.CASCADE)
    title  = models.CharField(max_length=200)
    text   = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField(blank=True, null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title

路由设置

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

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

如果什么都不做,就会被告知找不到模板等类似的消息。

TemplateDoesNotExist at /

那么,我们就这样改写一下。
将admin的url更改为path。
这样,它可以正确找到模板。

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

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'', include('blog.urls')),
]
广告
将在 10 秒后关闭
bannerAds