我在Heroku上部署了一个Django博客应用,但无法通过对象的ID访问对象。
当settings.py中的Debug = True时,一切正常。
即使当Debug = False时,也没有其他问题,例如静态文件问题,一切正常。我搜索了许多文章,但其中大多数都是关于静态文件问题的,与我的情况不同。
首先,我的模型。py:
class Post(models.Model):
title = models.CharField(verbose_name='TITLE', max_length=120)
slug = models.SlugField(verbose_name='SLUG', unique=True, allow_unicode=True, max_length=120)
content = RichTextUploadingField(verbose_name='POST CONTENT')
create_date = models.DateTimeField(verbose_name='Created date', auto_now_add=True)
author = models.ForeignKey(User, null=True, on_delete=models.CASCADE)
class Bookmark(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField(verbose_name='SLUG', unique=True, allow_unicode=True, max_length=100)
address = models.URLField(verbose_name='url', unique=True)
description = models.CharField(max_length=256)
category = models.ForeignKey(BookmarkCategory, on_delete=models.CASCADE, null=True, blank=True)
在urls.py中:
path('post/<int:id>/', views.PostDetailView.as_view(), name='post_detail'),
path('bookmark/<int:id>/update/', views.BookmarkUpdateView.as_view(), name='bookmark_update'),
当我尝试使用id访问模板中的Post或Bookmark对象时出现问题,例如:
{% url 'myblog:post_detail' post.id %}
或
{% url 'myblog:bookmark_update' bookmark.id %}
我期望的是对象的DetailView或UpdateView,但是出现内部服务器错误(显示500.html)。
我也尝试了int:pk而不是int:id,但是一样的错误。
同样,当Debug = True时,一切都很好,即使Debug = False时,其他一切也可以正常工作。
基于Post模型和搜索功能的存档文件有很多。他们都在工作。
所以我尝试将urls.py更改为:
path('post/<slug>/', views.PostDetailView.as_view(), name='post_detail'),
path('bookmark/<slug>/update/', views.BookmarkUpdateView.as_view(), name='bookmark_update'),
然后就可以了!我可以使用模板中的子弹看到我请求的视图。仅当我尝试使用对象的ID访问对象时,才会出现问题。
所以我想postgreSQL可能存在一些问题,它存储对象ID的方式可能存在问题(也许是因为在models.py中没有显式定义ID),因为当我在本地使用SQLite3时,通过对象的ID访问没有问题。
现在,我可以避免使用slug而不是int:id的问题,但是我想使用int:id,因为基于基于slug的URL有点多余。
请任何人都可以帮助您确定问题所在以及解决方案是什么?