开发者

What could cause a Django error when debug=False that isn't there when debug=True

开发者 https://www.devze.com 2023-02-10 03:49 出处:网络
Using the development server, it works with debug=True or False. In production, everything works if debug=True, but if debug=False, I get a 500 error and the apache logs end with an import error: \"I

Using the development server, it works with debug=True or False.

In production, everything works if debug=True, but if debug=False, I get a 500 error and the apache logs end with an import error: "ImportError: cannot import name Project".

Nothing in the import does anything conditional on debug - the only c开发者_StackOverflowode that does is whether the development server should serve static files or not (in production, apache should handle this - and this is tested separately and works fine).


Just to say, I ran into a similar error today and it's because Django 1.5 requires the ALLOWED_HOSTS parameter in the settings. You simply need to place this row to make it work ;)

...
ALLOWED_HOSTS = '*'
...

However, be aware that you need to set this parameter properly according to your actual host(s) (https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts)!

Values in this list can be fully qualified names (e.g. 'www.example.com'), in which case they will be matched against the request’s Host header exactly (case-insensitive, not including port). A value beginning with a period can be used as a subdomain wildcard: '.example.com' will match example.com, www.example.com, and any other subdomain of example.com. A value of '*' will match anything; in this case you are responsible to provide your own validation of the Host header (perhaps in a middleware; if so this middleware must be listed first in MIDDLEWARE_CLASSES).

So basically it's better for you to use this type of configuration once you're in production:

...
ALLOWED_HOSTS = [
    '.yourdomain.com',
]
...

thanks to gertvdijk for pointing this out


This happens if you have a circular import in one of your files. Check and see if you are importing something from Project and then importing something in Project from the original file that originally imported Project.

I ran into this same problem recently, and rearranging some of my imports helped fix the problem.


This can also happen if you do not have both a 500.html and 404.html template present. Just the 500 isn't good enough, even for URIs that won't produce a 404!


I had this problem as well. Although it persisted even when setting Allowed_hosts and already having 404 and 500 templates.

I also checked for circular imports, but that was not it.

I finally had django produce a log file, https://stackoverflow.com/a/15100463/1577916

I accidentally left in a "get_host" function which now exists under HttpRequest (changed to HttpRequest.get_host())with Django 1.5.

for some reason that was not raising an error with Debug True OR False.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号