在projects/urls.py我有:
urlpatterns = patterns('bizteen.projects.views',
url(r'^browse/$', 'browse', name='projects-browse-main'),
url(r'^browse/(\d+)/$', 'browse', name='projects-browse'),
url(r'^create/$', 'create', name='projects-create'),
url(r'^(\d+)/$', 'view_project', name='projects-view'),
)
Run Code Online (Sandbox Code Playgroud)
在模板中,我有:
<a href="{% url projects-browse-main %}">Browse projects</a>
Run Code Online (Sandbox Code Playgroud)
但是出现错误.
TemplateSyntaxError at /
Caught an exception while rendering: Reverse for 'bizteen.projects-browse-main' with arguments '()' and keyword arguments '{}' not found.
Run Code Online (Sandbox Code Playgroud)
我能弄清楚的最多的是名称被视为视图而不是视图.为什么会这样?
来自bizteen.projects.views:
from django.shortcuts import render_to_response
from django.http import HttpResponse, HttpResponseRedirect
from bizteen.projects.models import Project, ProjectComment
from django.template import RequestContext
def browse(request, page=0):
page_start = page * 25
page_end = page_start + 25
project_list = …Run Code Online (Sandbox Code Playgroud) 基本上我想使用一个基于用户名列出对象的通用视图.现在,问题是,我该怎么做:
(r'^resources/$',
ListView.as_view(
queryset=Resources.objects.filter(user=request.user.username),
...
)
)
Run Code Online (Sandbox Code Playgroud)
我找不到访问HttpRequest(请求)对象的方法...或者我是否需要使用自己的视图并在那里进行所有对象选择?
由于基于类的视图在Django中变得更好,我在实现基于类的视图时遇到了"最佳实践"问题.它基本上归结为URL模板标记.
给出这样的urls.py:
urlpatterns = patterns('some_app.views',
url(r'^$', 'index', name='some_app_index')
)
Run Code Online (Sandbox Code Playgroud)
该标记可以采用视图的路径:
{% url some_app.views.index %}
Run Code Online (Sandbox Code Playgroud)
或网址的名称:
{% url some_app_index %}
Run Code Online (Sandbox Code Playgroud)
现在,使用基于类的url conf,最终会得到一个这样的url:
from some_app.views import Index
urlpatterns = patterns('',
url(r'^$', Index.as_view(), name='some_app_index')
)
Run Code Online (Sandbox Code Playgroud)
这意味着使用{% url some_app.views.index %}不再有效但{% url some_app_index %}仍然有效.(而且{% url some_app.views.Index.as_view %}似乎不是一个解决方案).
所以,我的问题是,从模板中引用URL confs的最佳做法是什么?
到目前为止,我发现使用path.to.view方法更好,因为它是干净的命名空间.但是,基于类的视图看起来越来越好,使用url名称是一个更好的方法吗?在这种情况下,命名空间完全依赖于应用程序开发人员设置的名称属性,其方式是将网址名称与其他应用程序分开...
思考?我在Django文档中找不到"这样做"但如果有人写过这个,我很乐意阅读它.
在定义 URL 模式时,我应该使用正则表达式从 URL 获取 PK。
如果我想要一个没有PK的URL,如果没有提供,它将使用当前登录的用户怎么办?例子:
/user将获得当前登录用户的 DetailView/user/edit 将显示当前登录用户的 UpdateView我尝试pk=在Detail.as_view()调用中对 the进行硬编码,但它报告无效的关键字。
如何在 URL conf 中指定?
我的示例代码显示访问/userURL时需要 PK 错误:
urlpatterns = patterns('',
url(r'user/$',
DetailView.as_view(
model=Account,
template_name='user/detail.html')),
)`
Run Code Online (Sandbox Code Playgroud) 我正在关注youtube教程,并收到错误...
得到一个错误
The requested URL /hello was not found on this server.
Run Code Online (Sandbox Code Playgroud)
网站/ urls.py
urlpatterns = patterns('',
url(r'^hello/$', article.views.hello),
...
)
Run Code Online (Sandbox Code Playgroud)
文/ views.py
from django.shortcuts import render
from django.http import HttpResponse
def hello(request):
name = 'mike'
html = '<html><body> sup %s </body></html> ' %name
return HttpRequest(html)
Run Code Online (Sandbox Code Playgroud)
网站/ settings.py
INSTALLED_APPS = (
...
'article',
)
Run Code Online (Sandbox Code Playgroud) 当请求包含“api”子域时,我试图用另一个 url 覆盖 ROOT_URLCONF ,这就是我到目前为止所拥有的。
from django.utils.cache import patch_vary_headers
class SubdomainMiddleware:
def process_request(self, request):
path = request.get_full_path()
root_url = path.split('/')[1]
domain_parts = request.get_host().split('.')
if (len(domain_parts) > 2):
subdomain = domain_parts[0]
if (subdomain.lower() == 'www'):
subdomain = None
else:
subdomain = None
request.subdomain = subdomain
request.domain = domain
if request.subdomain == "api":
request.urlconf = "rest_api_example.urls.api"
else:
request.urlconf = "rest_api_example.urls.
Run Code Online (Sandbox Code Playgroud)
我也尝试使用 set_urlconf 模块“来自 django.core.urlresolvers”,但它不起作用。我在这里错过了什么吗?
python django django-middleware django-urls django-rest-framework
我想知道我是否可以得到你的帮助。
我有一个 urls.py,其中包含以下内容:
router = routers.SimpleRouter()
# AccountViewSet in accounts app
router.register(r'accounts', AccountViewSet)
# ProjectViewSet in projects app
router.register(r'projects', ProjectViewSet)
accounts_router = routers.NestedSimpleRouter(router, r'accounts', lookup='account')
# AccountProjectsViewSet in projects app
accounts_router.register(r'projects', AccountProjectsViewSet)
Run Code Online (Sandbox Code Playgroud)
如您所见,由于嵌套路由,帐户和项目之间的联系非常紧密。
我想将帐户路由逻辑移到accounts/urls.py,将项目路由逻辑移到projects/urls.py。
到目前为止,我在这方面的尝试导致以下错误:
RuntimeError: parent registered resource not found
Run Code Online (Sandbox Code Playgroud)
甚至可以将这个逻辑分开,还是需要在一起?
谢谢你的建议。
我有一个像下面这样的 Post 模型:
class Post(models.Model):
user = models.ForeignKey(User)
posted = models.DateTimeField(auto_now_add=True)
content = models.CharField(max_length=150)
picturefile = models.ImageField(upload_to="post_content", blank=True)
Run Code Online (Sandbox Code Playgroud)
我希望能够将每个帖子的 id 放在一个 url 中,这样我就可以单独访问每个帖子。我以前用用户的 id 这样做过,并且能够查看用户的个人资料页面。
url(r'^profile/(?P<username>\w+)/$', Dashviews.public_profile_view, name='public_profile_view'),
Run Code Online (Sandbox Code Playgroud)
但是如何使用帖子的 id 制作相同类型的网址?
我在 python 3.6.7 中使用 Django 2.1.3。假设我有这个 URL 路径:
path('admin/', admin.site.urls)
Run Code Online (Sandbox Code Playgroud)
如果我浏览到/ad,而DEBUG = True我看到普通的Django 404错误页面:

但是,如果我让DEBUG = False服务器向我显示500.htm而不是404.html无效的 URL /ad(不匹配任何 URL 模式)。
该404.html是否会显示该引发404错误一个有效的URL。(例如当函数发生不存在的对象查询时get_object_or_404)
这是我的/templates目录结构:
/templates
400.html
403.html
404.html
500.html
index.html
...
Run Code Online (Sandbox Code Playgroud)
那么,如果请求 URL 不匹配任何 URL 模式,我应该如何告诉 Django 在生产中(除了开发之外)显示 404 错误?
笔记:
404.html在根模板目录中有一个,则此 404.html 将与默认错误处理程序一起使用。更新:
我发现这是因为defaults.page_not_found引发了 a Resolver404,这是由以下原因引起的:
传递给 resolve() 的路径没有映射到视图
这正是发生的事情,(/ad不匹配任何视图)
这是我的 …
我对 Django 很陌生。
我正在使用 Django 3,当我创建一个新的 Django 项目时,urls.py 文件包含以下代码:
from django.conf.urls import url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
]
Run Code Online (Sandbox Code Playgroud)
我认为这个正则表达式代码适用于旧版本的 Django。较新的 Django 3 应该使用path.
我做错了什么吗?