我有一个 html 文件('search.html'),上面有一个表单。我将其保存到 ~/Django/Templates 只是为了争论。Django 书上说我把它保存在哪里并不重要,因为框架会找到它。不管怎样,我在views.py文件中设置了一个函数来渲染这个文件。这里是:
from django.http import HttpResponse
from django.shortcuts import render_to_response
def search(request):
return render_to_response('search.html')
Run Code Online (Sandbox Code Playgroud)
我也在 urls.py 文件中调用了这个函数:
urlpatterns = patterns('',
(r'^$', index),
(r'^search/$', search),
Run Code Online (Sandbox Code Playgroud)
但是,每当我访问 URL 中包含 ~/search 的页面时,我都会得到以下信息:
模板不存在位于 /search/
有什么问题?
我还开发了一个带有 i18n url 的 Django 应用程序。
这看起来真的很好,但是当更改语言时,我想留在同一/上一页。
最好的方法是什么?
基本上,为了获取新的 url,我需要reverse在更改语言后对上一页的名称执行 a 操作并进行重定向,但是我如何知道上一页的 url 名称?
编辑:
来自一位同事的解决方案:
使用 request.resolver_match 计算每种语言的下一个参数。对于每种语言:activate(language) + reverse('{app_name}:{url_name}', args, kwargs)使用 request.resolver_match 元素
你有更好的主意吗?
; 博士:有没有办法覆盖的默认行为reverse?
在我的 Django 项目中,我有很多网址,例如
url(r'^\w+/company/', include("company.urls", namespace="company")),
Run Code Online (Sandbox Code Playgroud)
这允许网址,如
.../companyA/company/
.../companyB/company/
Run Code Online (Sandbox Code Playgroud)
这样我就可以使用自定义中间件来修改请求,以根据使用我的网站的公司来包含一些特定的详细信息
这一切都很好,除了当 django 试图用reverse和破译完整路径时{% url .. %}......
它似乎/x/company/作为正则表达式的默认匹配返回。因为该django.utils.regex_helper方法next_char具有用于\w映射到的转义映射x
url我已经能够覆盖的标签替换为/x/正确的公司名称,我想知道是否有类似的事情我可以以reverse相同的方式覆盖,或者我可以做些什么来解决这个问题?
以前,我正在使用
url(r'^(?P<company_name>\w+)/company/', include("company.urls", namespace="company"))
Run Code Online (Sandbox Code Playgroud)
但这意味着我必须在每个视图中包含一个参数
def view(request, company_name):
...
Run Code Online (Sandbox Code Playgroud)
以及将它包含在我{% url %}试图避免的所有其他视图调用中(即使用)。
我的网页中有一个标题,该标题中有一个徽标。我想在该徽标中插入一个锚标记,该标记指向我的主页,即 index.html 页面,尽管调用了哪个视图或页面。我创建了一个 base.html,其中的一个片段是:
<div class="header">
<div class="inner_header">
<div class="logo">
<a href='#'><img src="{% static 'images/logo.png' %}" alt="logo" /> </a>
</div>
Run Code Online (Sandbox Code Playgroud)
我已将此 base.html 扩展到所有其他模板文件
我指向我的索引页和其他页面的 url 模式是这样的:
urlpatterns = patterns('',
url(r'^$', views.index, name='index'),
url(r'^category/(?P<category_name_slug>[\w\-]+)/$', views.category, name='category'),
url(r'^latest/(?P<latest_title_slug>[\w\-]+)/$', views.latest, name='latest'),
url(r'^headline/(?P<heading_title_slug>[\w\-]+)/$', views.headline, name='headline'),)
Run Code Online (Sandbox Code Playgroud)
我试过使用<a href="index.html">,<a href=''>和其他一堆不会产生预期结果或给出错误的东西。在不编写大量代码的情况下执行此操作的适当方法是什么?
在文档中,它说 URL 是从上到下测试的:
/articles/2003/ 将匹配列表中的第一个模式,而不是第二个模式,因为模式是按顺序测试的,第一个模式是第一个通过的测试。请随意利用该顺序来插入像这样的特殊情况。这里,Django会调用函数views.special_case_2003(request)
但根据我的经验,这种情况并没有发生 - 我希望最后一个 URL 成为通配符,以匹配任何其他规则未捕获的内容,但此规则最终会捕获所有内容。我试过把它放在顶部和底部。
以下是要求: - 任何其他规则未捕获的内容都应匹配home。- 反向home应该匹配最短的接受的 URL,在这种情况下它将是空白的。
如何才能做到这一点?
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^api/', include('project.api')),
url(r'^', include('places.urls')),
]
Run Code Online (Sandbox Code Playgroud)
places.urls:
app_name = 'places'
urlpatterns = [
url(r'^([0-9]+)/$', TemplateView.as_view(template_name=app_name + '/detail.html'), name='detail'),
url(r'^', TemplateView.as_view(template_name=app_name + '/home.html'), name='home'), # Single page app
]
Run Code Online (Sandbox Code Playgroud) 我使用 Django 的auth_views.password_change来允许用户更改密码。它使用自定义模板并且运行良好,但我遇到的问题是它重定向到 Django 的密码更改成功管理模板,而不是我声明的自定义模板。
urls.py
from django.conf.urls import url
from django.contrib.auth import views as auth_views
from . import views
app_name = 'users'
urlpatterns = [
url(r'^$', views.IndexView.as_view(), name='index'),
url(r'^add-user/$', views.CreateUserView.as_view(), name='add-user'),
url(r'^search/$', views.UserSearchView.as_view(), name='search-users'),
url(r'^login/$', views.LoginView.as_view(), name='login'),
url(r'^logout/$', views.LogoutView.as_view(), name='logout'),
url(r'^(?P<pk>\d+)/settings/update$', views.UpdateAccountView.as_view(), name='update-account'),
url(r'^settings/change/$', auth_views.password_change, {'template_name': 'users/forms/change-password.html'},
name='change-password'),
url(r'^settings/change-done/$', auth_views.password_change_done,
{'template_name': 'users/forms/change-password-done.html'}, name='change-password-done'),
url(r'^(?P<pk>\d+)/delete-user/$', views.DeleteUserView.as_view(), name='delete-user'),
Run Code Online (Sandbox Code Playgroud)
我错过了什么任何想法吗?
我在这个问题中有表单详细信息Django:将文件添加到表单给出多个参数错误
如何下载上传的文件。当我去编辑表单视图时,我可以看到上传的文件 url,但它没有下载。开发和生产模式要更改什么设置?
点击链接时出错:
Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:8000/media/Certificate.docx
Using the URLconf defined in tiktant.urls, Django tried these URL patterns, in this order:
^ ^$ [name='home']
^ ^login/$ [name='login']
^ ^logout/$ [name='logout']
^ ^logout_then_login/$ [name='logout_then_login']
^ ^dashboard/$ [name='dashboard']
The current URL, media/Certificate.docx, didn't match any of these.
Run Code Online (Sandbox Code Playgroud) 我想将弹性搜索与 django 集成,但首先我需要在 url 中获取一个不错的参数
http://127.0.0.1:8000/search?q=search+term
Run Code Online (Sandbox Code Playgroud)
urls.py(视图的)
urlpatterns = [
path('?q=', SearchIndexView.as_view(), name="search-index"),
]
Run Code Online (Sandbox Code Playgroud)
urls.py(应用程序的)
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('home.urls')),
path('u/', include('user.urls')),
path('search', include('search.urls')),
]
Run Code Online (Sandbox Code Playgroud)
这就是我到目前为止所拥有的,但我不知道如何让它发挥作用。如果可能的话,我想使用 tha path() 而不是 url()
模型/数据库的 id (PK) 可以传递给 URL 模式并在其中使用。每个人,包括黑客,都可以从这个和模板中的实际数据中拼凑出一些关于我的数据库的信息。
在这一点上,我的问题有点笼统。我只想了解如何使用上述信息来破坏数据。或者,如果有人可以向我指出有关此主题的进一步阅读,我将不胜感激。
这是一个普遍的问题,因为我试图更多地了解如何保护 Django 站点。我已经阅读了几篇文章,但没有什么能满足这个问题。
代码:href 传递博客 id 以用于 url 匹配并最终从视图/模板中的数据库中提取数据:
<a href= "{% url 'details' blog.id %}">
Run Code Online (Sandbox Code Playgroud)
和
urlpatterns = [
path('<int:blog_id>/', views.details, name = 'details'),
]
Run Code Online (Sandbox Code Playgroud)
并且 URL 是:域/应用程序名称/blog_id/
TL;DR:你能用我免费提供的关于后端的几条信息来入侵我的网站吗?
我不太确定我是否理解路由在 DRF 中的工作原理。我浏览了文档,但仍然没有掌握其中的差异。
我有以下观点:
from django.shortcuts import render
from django.shortcuts import get_object_or_404
from rest_framework.viewsets import ViewSet
from rest_framework.response import Response
from .models import Order
from .serializer import OrderSerializer
class OrderAPIViewSet(ViewSet):
def post(self, request):
print(request)
Run Code Online (Sandbox Code Playgroud)
这是urls.py在我的应用程序中:
from django.urls import include, path
from rest_framework import routers
from .views import OrderAPIViewSet
router = routers.DefaultRouter()
router.register(r'orders', OrderAPIViewSet, basename='order')
urlpatterns = router.urls
Run Code Online (Sandbox Code Playgroud)
这是主要的urls.py:
from django.contrib import admin
from django.urls import path, include
from django.conf.urls.static import static
from django.conf import settings
urlpatterns …Run Code Online (Sandbox Code Playgroud) django-urls django-views django-rest-framework django-rest-viewsets django-url-reverse
django-urls ×10
django ×9
python ×3
django-views ×2
python-3.x ×2
django-forms ×1
security ×1
templates ×1