目前,在我的settings模块中我有这个:
LOGIN_URL = '/login'
Run Code Online (Sandbox Code Playgroud)
如果我决定更改登录URL urls.py,我也必须在此更改.还有更有活力的方法吗?
我熟悉Django.
我已经成功安装并测试了一个演示站点.我现在想要打开管理模块,看看会发生什么.
我采取的步骤(授予,一些是不必要的,但我只是想确保我从一个干净的石板开始):
这是我的mysite/settings.py文件的样子(仅限相关部分)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
# The next lines are my models
'mysite.foo',
'mysite.foobar',
)
Run Code Online (Sandbox Code Playgroud)
这是我的mysite/urls.py文件的样子:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Example:
# (r'^mysite/', include('mysite.foo.urls')),
# Uncomment the admin/doc line below and add 'django.contrib.admindocs'
# to INSTALLED_APPS to enable admin documentation:
(r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin: …Run Code Online (Sandbox Code Playgroud) 我为我的客户维护一个Django webapp.我们在Django和计算机用户中建立了它,它很棒.我们现在想要迎合移动设备用户.
在模板切换之上,我们还需要以不同的方式工作.应用程序将具有以略有不同的方式工作的视图,但也需要简化URL结构.
我意识到我要求的是什么违反了DRY的精神,但是有一个很好的方法来分裂它,urls.py以便它的一半用于ourdomain.com,而另一半用于m.ourdomain.com?如果我能做到这一点,我可以添加mobile_views.py并编写新视图.
Django的网站已在该项目中启用,但我很高兴使用硬编码request.domain.startswith('m.')式黑客.似乎可能表现得更好 - 但我不知道如何从URL文件中获取请求.
我正在阅读有关通用视图的一些教程和书籍.
在官方教程的第4部分中,他们写了一个这样的例子
from django.conf.urls import patterns, include, url
from django.views.generic import DetailView, ListView
from polls.models import Poll
urlpatterns = patterns('',
url(r'^$',
ListView.as_view(
queryset=Poll.objects.order_by('-pub_date')[:5],
context_object_name='latest_poll_list',
template_name='polls/index.html')),
url(r'^(?P<pk>\d+)/$',
DetailView.as_view(
model=Poll,
template_name='polls/detail.html')),
url(r'^(?P<pk>\d+)/results/$',
DetailView.as_view(
model=Poll,
template_name='polls/results.html'),
name='poll_results'),
url(r'^(?P<poll_id>\d+)/vote/$', 'polls.views.vote'),
)
Run Code Online (Sandbox Code Playgroud)
我也一直在阅读Django的权威指南:Web Development Done Right,Second Edition,当他们谈到通用视图时,他们就像这样写了他们的例子
from django.conf.urls.defaults import *
from django.views.generic import list_detail
from mysite.books.models import Publisher
publisher_info = {
'queryset': Publisher.objects.all(),
'template_name': 'publisher_list_page.html',
}
urlpatterns = patterns('',
(r'^publishers/$', list_detail.object_list, publisher_info)
)
Run Code Online (Sandbox Code Playgroud)
我应该使用ListView还是list_detail?他们都来自 …
我开始使用Django-MPTT应用程序在我的Django网站页面上获得基于树的方法.
对于前者 我有子页面的页面:
发呆:
休息:
如何从urls.py访问它们?什么模式会有所帮助?我是否需要在模型中存储Full_path,或者可以通过url模式完成?
对于特定需求(django-jqgrid),我定义了一个类(表示一个Grid),我必须提供一个url属性.由于我只使用反向URL(没有静态定义),我用reverse_lazy()这个问题.
只要我不必传递参数,这就行得很好reverse_lazy().但是,如果我想Grid特定于某个对象(这里是a DocumentSet),那么这个url参数也需要特定于该对象,因此我需要为reverse_lazy()提供一个参数.
在运行时,我可以访问,DocumentSet因为我将它定义为对象的属性,并且我确保调用的第一个函数Grid将此对象作为参数,并正确设置属性.
我尝试使用此代码:
class DocumentGrid(JqGrid):
documentset = None
model = Document
url = reverse_lazy('document-grid-handler', kwargs = {'pk' : documentset.id, })
def get_queryset(self, request):
return self.documentset.documents
def get_json(self, request, documentset):
self.documentset = documentset
return super(DocumentGrid, self).get_json(request)
Run Code Online (Sandbox Code Playgroud)
但是当然,导入文件时会失败,因为NoneType object has no attribute 'id'.
所以我尝试使用django.utils.functional.lazy(),通过将这个琐碎和愚蠢的函数添加到我的模型:
def get_id(self):
return self.id
Run Code Online (Sandbox Code Playgroud)
并通过使用此代码:
class DocumentGrid(JqGrid):
documentset = …Run Code Online (Sandbox Code Playgroud) 如果我有一个像这样的URL:
url(r'^reset/(?P<uid>\w+)/(?P<token>\w+)/$', 'django.contrib.auth.views.password_reset_confirm', name="reset_password")
Run Code Online (Sandbox Code Playgroud)
和这样的URL标记:
{% url 'reset_password' uid=uid token=token %}
Run Code Online (Sandbox Code Playgroud)
当我尝试呈现包含标记的页面时,为什么会出现此错误:
Reverse for 'reset_password' with arguments '()' and keyword arguments not found
Run Code Online (Sandbox Code Playgroud)
uid和token都是有效的字符串.
我正在使用Django构建学生管理系统.
在此代码中,用户name=StudentName&grade=Grade&id=StudentID&phone=ParentPhoneNumber&report=StudentReportNumber使用该decrypt()方法搜索具有加密查询的学生
.
以下是两种方法,即处理查询的方法和显示学生资料的方法.
查询中的数据不会保存到数据库中,但会用于从数据库中查询学生详细信息.
def process_query(request):
# process the query from the url /?details={{ some hashes here }}
if request.method == 'GET':
raw_deatils = request.GET.get('details', None)
if raw_deatils:
details = decrypt(raw_deatils)
# decrypt is a function that is defined
# in the utils which takes the input string,
# check predeifined tests to test if valid.
# and return the decrypted query string else None
if details:
# now the decrypted message looks something like …Run Code Online (Sandbox Code Playgroud) 我很确定周围有重复的,但是找不到。
在dev的urls.py中声明a urlpatterns时,我成功使用了以下命令:
urlpatterns = [
# some routes
]
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
Run Code Online (Sandbox Code Playgroud)
可以理解,哪个可行。
但是,如果我尝试以下操作:
urlpatterns = [
# some routes,
static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
]
Run Code Online (Sandbox Code Playgroud)
django服务器死于抱怨:
?: (urls.E004) Your URL pattern [<URLPattern '^static\/(?P<path>.*)$'>] is invalid. Ensure that urlpatterns is a list of path() and/or re_path() instances.
为什么两个定义不相等?的返回static()应相同:
return [
re_path(r'^%s(?P<path>.*)$' % re.escape(prefix.lstrip('/')), view, kwargs=kwargs),
]
Run Code Online (Sandbox Code Playgroud)
因此有效,但仅当我将元素连接到列表而不是直接在列表中定义时才有效。
为什么一种方法有效,而另一种无效?
在django2.1.5和DRF 3.9.1中,我试图添加不能使用的router.urls命名空间。
path('api/v2/', include(router.urls, namespace="v2"))
Run Code Online (Sandbox Code Playgroud)
我的终端中的错误是
“在include()中指定名称空间而不提供app_name'django.core.exceptions.ImproperlyConfigured:不支持在include()中指定名称空间而不提供app_name。在包含的模块中设置app_name属性,或传递2包含模式列表和app_name的元组”
我为命名空间设置app_name时,找不到任何合适的解决方案。如何在router.urls上使用名称空间,或者在Django 2版本中无法使用它?
尝试添加app_name,但不能解决我的问题
这是我的代码。
config.urls.py
from django.urls import path, include
from django.contrib import admin
from rest_framework import routers
from project.courses import views
router = routers.SimpleRouter()
router.register(r'courses', views.CourseViewSet)
router.register(r'reviews', views.ReviewViewSet)
urlpatterns = [
path('admin/', admin.site.urls),
path('api-auth/', include('rest_framework.urls')),
path('api/v1/courses/', include('project.courses.urls', namespace='courses')),
path('api/v2/', include(router.urls, namespace="v2")),
]
Run Code Online (Sandbox Code Playgroud)
courses.urls.py
from django.urls import path
from . import views
app_name = 'project.courses'
urlpatterns = [
path('', views.ListCreateCourse.as_view(), name='course_list'),
path('<int:pk>', views.RetrieveUpdateDestroyCourse.as_view(),
Run Code Online (Sandbox Code Playgroud)
name ='course_detail'),path('/ reviews /',views.ListCreateReview.as_view(),name ='review_list'),path('/ reviews /',views.RetrieveUpdateDestroyReview.as_view(),name ='review_detail '),]
这是我要编写的代码。 …
django-urls ×10
django ×8
python ×5
django-1.5 ×1
django-2.1 ×1
django-admin ×1
django-mptt ×1
django-sites ×1
django-views ×1
python-3.x ×1