几个月来,我一直在努力在 Heroku 上部署我的第一个 Django 站点。我使用 成功构建git push heroku master并成功收集静态文件heroku run python manage.py collectstatic --noinput,但是当DEBUG = config('DEBUG', default=False, cast=bool). 当 DEBUG 设置为 True 时,该站点确实可以工作(尽管我将不得不弄清楚使数据库工作)。我认为我允许的主机设置正确。我可以在 SO 上找到的所有答案都不能完全解决我的问题。
我从这个答案中添加了日志记录,这在日志中为我提供了更多信息,但是我不明白为什么当我能够成功收集静态文件时它们不可用?
2018-12-09T16:24:38.181428+00:00 heroku[web.1]: State changed from starting to up
2018-12-09T16:24:39.173376+00:00 app[web.1]: /app/.heroku/python/lib/python2.7/site-packages/whitenoise/base.py:104: UserWarning: No directory at: /app/staticfiles/
2018-12-09T16:24:39.173419+00:00 app[web.1]: warnings.warn(u'No directory at: {}'.format(root))
2018-12-09T16:24:39.173421+00:00 app[web.1]: /app/.heroku/python/lib/python2.7/site-packages/whitenoise/base.py:104: UserWarning: No directory at: /app/staticfiles/
2018-12-09T16:24:39.173423+00:00 app[web.1]: warnings.warn(u'No directory at: {}'.format(root))
Run Code Online (Sandbox Code Playgroud)
我显然错过了很多,任何指导将不胜感激。
编辑添加:
import os
import dj_database_url
from …Run Code Online (Sandbox Code Playgroud) 我正在尝试获取 JSON 对象列表,将它们转换为 Python dicts,然后使用每个 Python dicts 的对象填充 Concert 模型。
import json
from models import Concert
with open('output.json') as f:
data = json.load(f)
for concert in data:
Concert.objects.create(**concert)
Run Code Online (Sandbox Code Playgroud)
我收到一条我以前从未见过的错误消息:
ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
Run Code Online (Sandbox Code Playgroud)
这是可以轻松解决的问题吗?我的模型中有一个外键对应于 JSON 对象中的键值对之一;这与这个错误有关吗?
我对 Scrapy 很陌生,这是迄今为止我最复杂的蜘蛛。
import scrapy
from scrapy.selector import HtmlXPathSelector
class CocabotSpider(scrapy.Spider):
name = 'cocabot'
start_urls = ['https://www.tallahasseearts.org/event/?keyword&start_date&end_date&date_format=m-d-Y&term=400&event_location&save_lst_list&view']
custom_settings = {
'FEED_URI' : 'output/cocaoutput.json'
}
def parse(self, response):
# follow links to concert pages
for href in response.css("div.search-img a::attr(href)"):
yield response.follow(href, self.parse_concert)
# follow links to venue pages
for href in response.css("span.venue-event a::attr(href)"):
yield response.follow(href, self.parse_venue)
# follow links to pagination pages
for href in response.css("li a.next.page-numbers::attr(href)"):
yield response.follow(href, self.parse)
def parse_concert(self, response):
def extract_with_css(query):
return response.css(query).extract_first()
yield {
'headliner' : …Run Code Online (Sandbox Code Playgroud) 我有一个序列化器来填充 AJAX 表,如下所示:
class BookSerializer(seralizers.ModelSerializer):
author = serializers.SlugRelatedField(
many=True,
read_only=True,
slug_field="name"
)
class Meta:
model = Book
fields = (
"name",
"author",
"slug"
)
Run Code Online (Sandbox Code Playgroud)
author可以包含任意数量的作者,这就是为什么我需要以这种方式处理它。目前我可以打印出书名并将其与其链接。我还得到了作者姓名列表,而不是 ID。
我的问题是如何获取每个作者页面的 slugs?我想将每个作者链接到自己的页面,但是使用类似的东西author.slug不起作用,添加以下内容也不起作用:
author_slugs = serializers.HyperlinkedRelatedField(
many=True,
read_only=True,
view_name="slug"
)
Run Code Online (Sandbox Code Playgroud)
然后我将author_slugs添加到字段中——这引发了一个错误,即author_slugs不是Book模型中的有效字段。有没有办法为每个作者访问多个字段?