标签: django-urls

Django将url命名为url,模板url标签无法识别

在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)

django django-templates django-urls

5
推荐指数
1
解决办法
7838
查看次数

如何从Django中的urls.py访问HttpRequest

基本上我想使用一个基于用户名列出对象的通用视图.现在,问题是,我该怎么做:

(r'^resources/$',
  ListView.as_view(
    queryset=Resources.objects.filter(user=request.user.username),
    ...
  )
)
Run Code Online (Sandbox Code Playgroud)

我找不到访问HttpRequest(请求)对象的方法...或者我是否需要使用自己的视图并在那里进行所有对象选择?

python django django-urls

5
推荐指数
1
解决办法
2738
查看次数

Django:URL conf,url模板标记的最佳实践

由于基于类的视图在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文档中找不到"这样做"但如果有人写过这个,我很乐意阅读它.

django django-templates django-urls django-views

5
推荐指数
1
解决办法
1958
查看次数

如何使用当前登录用户作为 Django DetailView 的 PK?

在定义 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)

python django django-urls django-class-based-views

5
推荐指数
1
解决办法
3777
查看次数

在此服务器django上找不到请求的URL

我正在关注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)

python regex django django-urls

5
推荐指数
1
解决办法
5813
查看次数

Django:在中间件中用 request.urlconf 覆盖 ROOT_URLCONF

当请求包含“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

5
推荐指数
1
解决办法
2601
查看次数

如何将嵌套路由移动到单独的 urls.py 中?

我想知道我是否可以得到你的帮助。

我有一个 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)

甚至可以将这个逻辑分开,还是需要在一起?

谢谢你的建议。

django django-urls django-rest-framework

5
推荐指数
0
解决办法
468
查看次数

Django url中的对象ID

我有一个像下面这样的 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 django url django-urls

5
推荐指数
1
解决办法
1万
查看次数

Debug=False 中不存在 url 的 Django 500 错误

我在 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 错误?

笔记:

  • 根据docs,如果我404.html在根模板目录中有一个,则此 404.html 将与默认错误处理程序一起使用。

更新:

我发现这是因为defaults.page_not_found引发了 a Resolver404,这是由以下原因引起的:

传递给 resolve() 的路径没有映射到视图

这正是发生的事情,(/ad不匹配任何视图)

这是我的 …

django django-urls django-errors

5
推荐指数
1
解决办法
1404
查看次数

为什么我的 Django3 项目是用正则表达式代码创建的?

我对 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.

我做错了什么吗?

python django django-urls

5
推荐指数
1
解决办法
80
查看次数