首先,我对部署非常陌生。 我在Windows计算机上使用Django建立了一个新的报纸项目。 它在本地主机上运行良好。 现在,我想在 pythonanywhere 中部署它。
我正在使用默认的db.sqlite3作为数据库。 但是在生产中,我将使用MySql(对此它们具有简单的设置和支持)
问题: 作为报纸,我的网站需要大量专业过滤。查找单个值 有时,我不得不对过滤后的数据使用列表索引,例如-(在获取上下文数据内):
context['main_lead_news']=SingleNews.objects.filter(
published_date__lte=timezone.now(),
news_extras__icontains='main_lead_news').order_by('-published_date')[0]
如您所见,如果“过滤器”未找到任何内容,则会出现以下错误: 列表索引超出范围。总体而言,我的代码将在没有任何临时模型数据的情况下中断(当前,尽管其中大多数是lorem ipsum。)在代码完成之前,我已将其填充。现在,我该如何部署我的项目,因为由于这些错误,我可能没有机会再次在线填充它们。而且我的调试将是错误的,几乎不可能在没有发现错误的情况下运行我的代码!
我有两个(一半!)想法-
1。部署时以某种方式上传sqlite3数据库,然后进行配置后 MySQL,将数据从sqlite3即时传输到MySQL(我也不知道该怎么做。)
2。只需注释掉“模型”中的所有视图和URL以及absolute_urls,除了 创建视图,然后部署它。通过该视图填充数据库后,我将删除Github中的提交并从那里更新代码(这对我来说似乎是神话般的)。
对于这种情况是否有约定?我应该怎么做? 任何帮助将不胜感激。
答案 0 :(得分:0)
要不从Django ORM过滤器中获取错误,可以使用exists
选项,如下所示:
news_present = SingleNews.objects.filter(published_date__lte=timezone.now(), news_extras__icontains='main_lead_news').exists()
if news_present:
context['main_lead_news']=SingleNews.objects.filter(
published_date__lte=timezone.now(),
news_extras__icontains='main_lead_news').order_by('-published_date')[0]
或使用count
这样的选项:
news_count = SingleNews.objects.filter(published_date__lte=timezone.now(), news_extras__icontains='main_lead_news').count()
if news_count > 0:
context['main_lead_news']=SingleNews.objects.filter(
published_date__lte=timezone.now(),
news_extras__icontains='main_lead_news').order_by('-published_date')[0]
exists
不会获取所有条目,而只会检查过滤器查询中是否存在任何值。因此,它返回True
或False
。要了解更多信息:https://docs.djangoproject.com/en/3.1/ref/models/querysets/#exists