#26155 closed Bug (fixed)
Skip URL checks if settings.ROOTURL_CONF isn't defined
| Reported by: | Buddy Lindsey | Owned by: | Buddy Lindsey |
|---|---|---|---|
| Component: | Core (System checks) | Version: | 1.9 |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Accepted | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
If you try to create a migration with makemigrations it throws an error (below) because it is running the check_url_config system check. There currently isn't a way to disable this check, and the use case we have we don't need/use urls.
Traceback (most recent call last):
File "./manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/buddy/.venv/sk-client/lib/python3.4/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
utility.execute()
File "/home/buddy/.venv/sk-client/lib/python3.4/site-packages/django/core/management/__init__.py", line 345, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/buddy/.venv/sk-client/lib/python3.4/site-packages/django/core/management/base.py", line 348, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/buddy/.venv/sk-client/lib/python3.4/site-packages/django/core/management/base.py", line 398, in execute
self.check()
File "/home/buddy/.venv/sk-client/lib/python3.4/site-packages/django/core/management/base.py", line 426, in check
include_deployment_checks=include_deployment_checks,
File "/home/buddy/.venv/sk-client/lib/python3.4/site-packages/django/core/checks/registry.py", line 75, in run_checks
new_errors = check(app_configs=app_configs)
File "/home/buddy/.venv/sk-client/lib/python3.4/site-packages/django/core/checks/urls.py", line 9, in check_url_config
resolver = get_resolver()
File "/home/buddy/.venv/sk-client/lib/python3.4/functools.py", line 448, in wrapper
result = user_function(*args, **kwds)
File "/home/buddy/.venv/sk-client/lib/python3.4/site-packages/django/core/urlresolvers.py", line 151, in get_resolver
urlconf = settings.ROOT_URLCONF
File "/home/buddy/.venv/sk-client/lib/python3.4/site-packages/django/conf/__init__.py", line 56, in __getattr__
return getattr(self._wrapped, name)
AttributeError: 'Settings' object has no attribute 'ROOT_URLCONF'
Here are the steps to reproduce this error:
./manage.py startproject demo cd blog vim blog/settings.py # comment out ROOT_URLCONF ./manage.py startapp blog vim blog/models.py # add model below ./manage.py makemigrations
from django.db import models class Post(models.Model): title = models.CharField(max_length=, blank=True) description = models.TextField(blank=True)
That should be enough to reproduce the error.
My thought is we need to add a way to disable the check_url_config check.
Change History (10)
comment:1 by , 10 years ago
| Summary: | Can not Disable `check_url_config` Url Check → Skip URL checks if settings.ROOTURL_CONF isn't defined |
|---|---|
| Triage Stage: | Unreviewed → Accepted |
comment:2 by , 10 years ago
| Owner: | changed from to |
|---|---|
| Status: | new → assigned |
comment:3 by , 10 years ago
I don't think it would because when I set settings.ROOT_URLCONF to an empty string it tries to run through the url resolver code which erros because it can't find the app it is assigned to, or any urlpatterns as it tries to resolve them.
I tried to tweak on what is returned where the ROOT_URLCONF is accessed, and the few things I tried didn't help.
Here is where the code is trying to access the attribute and is throwing the exception: https://github.com/django/django/blob/1.9.1/django/core/urlresolvers.py#L147-L152
comment:5 by , 10 years ago
If you return None for the settings of ROOT_URLCONF you get the following excpetion:
Traceback (most recent call last):
File "/home/buddy/.venv/sk-client/lib/python3.4/site-packages/django/core/urlresolvers.py", line 419, in url_patterns
iter(patterns)
TypeError: 'NoneType' object is not iterable
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "./manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/buddy/.venv/sk-client/lib/python3.4/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
utility.execute()
File "/home/buddy/.venv/sk-client/lib/python3.4/site-packages/django/core/management/__init__.py", line 345, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/buddy/.venv/sk-client/lib/python3.4/site-packages/django/core/management/base.py", line 348, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/buddy/.venv/sk-client/lib/python3.4/site-packages/django/core/management/base.py", line 398, in execute
self.check()
File "/home/buddy/.venv/sk-client/lib/python3.4/site-packages/django/core/management/base.py", line 426, in check
include_deployment_checks=include_deployment_checks,
File "/home/buddy/.venv/sk-client/lib/python3.4/site-packages/django/core/checks/registry.py", line 75, in run_checks
new_errors = check(app_configs=app_configs)
File "/home/buddy/.venv/sk-client/lib/python3.4/site-packages/django/core/checks/urls.py", line 10, in check_url_config
return check_resolver(resolver)
File "/home/buddy/.venv/sk-client/lib/python3.4/site-packages/django/core/checks/urls.py", line 19, in check_resolver
for pattern in resolver.url_patterns:
File "/home/buddy/.venv/sk-client/lib/python3.4/site-packages/django/utils/functional.py", line 33, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/home/buddy/.venv/sk-client/lib/python3.4/site-packages/django/core/urlresolvers.py", line 426, in url_patterns
raise ImproperlyConfigured(msg.format(name=self.urlconf_name))
django.core.exceptions.ImproperlyConfigured: The included URLconf 'None' does not appear to have any patterns in it. If you see valid patterns in the file then the issue is probably caused by a circular import.
I modified the method to be. Not exactly sure how you mean to use an if in this case.
@lru_cache.lru_cache(maxsize=None) def get_resolver(urlconf=None): if urlconf is None: from django.conf import settings urlconf = getattr(settings, 'ROOT_URLCONF', None) return RegexURLResolver(r'^/', urlconf)
comment:6 by , 10 years ago
I mean something like this:
@register(Tags.urls)
def check_url_config(app_configs, **kwargs):
from django.urls import get_resolver
if getattr(settings, ROOT_URLCONF, None):
resolver = get_resolver()
return check_resolver(resolver)
return []
comment:7 by , 10 years ago
I see what you are after.
Just tried that and it works, is an easier solution too. You want me to fix it, add tests, and submit a PR? Or you?
Would a
if hasattr(settings, 'ROOT_URLCONF')check be sufficient?