升级到Django 4.0后,运行时出现以下错误python manage.py runserver
...
File "/path/to/myproject/myproject/urls.py", line 16, in <module>
from django.conf.urls import url
ImportError: cannot import name 'url' from 'django.conf.urls' (/path/to/my/venv/lib/python3.9/site-packages/django/conf/urls/__init__.py)
Run Code Online (Sandbox Code Playgroud)
我的urls.py如下:
from django.conf.urls
from myapp.views import home
urlpatterns = [
url(r'^$', home, name="home"),
url(r'^myapp/', include('myapp.urls'),
]
Run Code Online (Sandbox Code Playgroud) 在Django 1.0之前有一个简单的方法来获取一个对象的管理URL,我写了一个小的过滤器,我会像这样使用: <a href="{{ object|admin_url }}" .... > ... </a>
基本上我使用的是url reverse函数,视图名称为 'django.contrib.admin.views.main.change_stage'
reverse( 'django.contrib.admin.views.main.change_stage', args=[app_label, model_name, object_id] )
Run Code Online (Sandbox Code Playgroud)
得到网址.
正如您可能已经猜到的那样,我正在尝试更新到最新版本的Django,这是我遇到的障碍之一,获取管理URL的方法不再适用.
我怎么能在django 1.0中这样做?(或者1.1,因为我正在尝试更新到svn中的最新版本).
我有一个像这样的Django网址:
url(
r'^project_config/(?P<product>\w+)/(?P<project_id>\w+)/$',
'tool.views.ProjectConfig',
name='project_config'
),
Run Code Online (Sandbox Code Playgroud)
和我的views.py:
def ProjectConfig(request, product, project_id=None, template_name='project.html'):
...
# do stuff
Run Code Online (Sandbox Code Playgroud)
问题是我希望project_id参数是可选的.我想这样,project_id
并且/project_config/
都是同样有效的url模式,所以IF /project_config/12345abdce/
传递,然后我可以使用它.就目前而言,如果我尝试访问没有project_id
参数的url,我会得到404 .
我很困惑static root
,想澄清一些事情.
为了服务于Django的静态文件,下面应该是settings.py
和urls.py
:
import os
PROJECT_DIR=os.path.dirname(__file__)
Run Code Online (Sandbox Code Playgroud)
STATIC_ROOT= os.path.join(PROJECT_DIR,'static_media/')
Run Code Online (Sandbox Code Playgroud)
STATIC_URL = '/static/'
Run Code Online (Sandbox Code Playgroud)
STATICFILES_DIRS = ( os.path.join(PROJECT_DIR,'static/'),)
Run Code Online (Sandbox Code Playgroud)
......并在urls.py
以下几行中:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += patterns('', (
r'^static/(?P<path>.*)$',
'django.views.static.serve',
{'document_root': settings.STATIC_ROOT}
))
Run Code Online (Sandbox Code Playgroud)
python manage.py collectstatic
问题:
任何人都可以向我解释工作流程:如何理想地完成工作.到目前为止,我将上面的代码片段复制/粘贴到他们指定的位置,并继续在静态目录中创建新文件,它可以工作.settings.STATIC_ROOT
然而,在我看来,我指的是另一个目录.
如果有人能够解释每个设置的工作流程,那将是很好的:如何收集和管理文件,以及遵循什么样的好习惯.
谢谢.
在django在线课程中,教师让我们使用该url()
函数调用视图并使用urlpatterns列表中的正则表达式.我在youtube上看过其他的例子.例如
from django.contrib import admin
from django.urls import include
from django.conf.urls import url
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^polls/', include('polls.urls')),
]
#and in polls/urls.py
urlpatterns = [
url(r'^$', views.index, name="index"),
]
Run Code Online (Sandbox Code Playgroud)
但是,在浏览Django教程时,他们使用的是path()
:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name="index"),
]
Run Code Online (Sandbox Code Playgroud)
此外,正则表达式似乎不适用于该path()
函数,因为使用a path(r'^$', views.index, name="index")
将找不到mysite.com/polls/
视图.
正在使用path()
没有正则表达式匹配正确的方式?是url()
更强大,但更加复杂,以至于他们正在使用path()
与开始我们吗?或者是针对不同工作的不同工具的情况?
升级到Django 1.10后,我收到错误:
TypeError: view must be a callable or a list/tuple in the case of include().
Run Code Online (Sandbox Code Playgroud)
我的urls.py如下:
from django.conf.urls import include, url
urlpatterns = [
url(r'^$', 'myapp.views.home'),
url(r'^contact/$', 'myapp.views.contact'),
url(r'^login/$', 'django.contrib.auth.views.login'),
]
Run Code Online (Sandbox Code Playgroud)
完整的追溯是:
Traceback (most recent call last):
File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/utils/autoreload.py", line 226, in wrapper
fn(*args, **kwargs)
File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 121, in inner_run
self.check(display_num_errors=True)
File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/core/management/base.py", line 385, in check
include_deployment_checks=include_deployment_checks,
File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/core/management/base.py", line 372, in _run_checks
return checks.run_checks(**kwargs)
File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/core/checks/registry.py", line 81, in run_checks
new_errors = check(app_configs=app_configs)
File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/core/checks/urls.py", line …
Run Code Online (Sandbox Code Playgroud) 如何查看"反向"正在查看的当前urlpatter?
我在一个观点中反向调用我认为应该有效的论据,但事实并非如此.我可以用任何方式检查那里有什么,为什么我的模式不是?
我有一些代码,当它执行时,它抛出一个NoReverseMatch,说:
NoReverseMatch at/my_url/Reverse for'my_url_name',参数'()'和关键字参数'{}'未找到.n模式尝试:[]
这是什么意思,我能做些什么呢?
如何将与我的任何其他URL不匹配的流量重定向回主页.我的urls.py看起来像,
urlpatterns = patterns('',
url(r'^$', 'macmonster.views.home'),
#url(r'^macmon_home$', 'macmonster.views.home'),
url(r'^macmon_output/$', 'macmonster.views.output'),
url(r'^macmon_about/$', 'macmonster.views.about'),
url(r'^.*$', 'macmonster.views.home'),
)
Run Code Online (Sandbox Code Playgroud)
因为它是最后一个条目将所有"其他"流量发送到主页但我想通过HTTP 301或302重定向.
谢谢,
我正在尝试django.我在urls.py中使用了namespace
我include()
的一个参数.当我运行服务器并尝试浏览时,我收到此错误.
File "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\urls\conf.py", line 39, in include
'Specifying a namespace in include() without providing an app_name '
django.core.exceptions.ImproperlyConfigured: Specifying a namespace in include() without providing an app_name is not supported. Set the app_name attribute in the included module, or pass a 2-tuple containing the list of patterns and app_name instead.
Run Code Online (Sandbox Code Playgroud)
这些是我的urls.py文件:
#project/urls.py
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^reviews/', include('reviews.urls', namespace='reviews')),
url(r'^admin/', include(admin.site.urls)),
]
Run Code Online (Sandbox Code Playgroud)
和
#app/urls.py
from django.conf.urls import url …
Run Code Online (Sandbox Code Playgroud) django ×10
django-urls ×10
python ×6
django-views ×2
django-1.10 ×1
django-4.0 ×1
django-admin ×1