在Django父模板设置动态URL及视图、URL配置相关问题
Django 导航菜单动态 href 实现问题解答
1. 能否基于当前目录结构将current_week视图与base.html配合使用?
完全可以,推荐用全局上下文处理器实现,这是适配全局父模板的最优方案:
- 无需在每个子视图中重复传递current_week数据,一次性配置后所有模板均可直接调用
- 具体操作步骤:
- 在你的app目录下创建
context_processors.py文件 - 写入处理器函数(复用现有current_week视图逻辑):
from django.utils import timezone from .models import Week def current_week_processor(request): current_week = Week.objects.filter( start_date__lte=timezone.now(), end_date__gte=timezone.now() ).first() return {'current_week': current_week} - 在项目
settings.py的TEMPLATES配置中,将该处理器添加到context_processors列表:TEMPLATES = [ { ... 'OPTIONS': { 'context_processors': [ ... 'my_app.context_processors.current_week_processor', ], }, }, ] - 之后在base.html中直接调用数据,比如:
<a href="{% url 'current-week' current_week.id %}">当前周赛事</a>
- 在你的app目录下创建
2. views.py和urls.py应放在base.html的什么位置?标注***的文件位置是否正确?
Django严格分离后端逻辑与模板文件:
- base.html属于模板文件,需放在app的
templates目录(如my_app/templates/my_app/base.html)或项目根目录的templates目录 - views.py和urls.py属于后端逻辑文件,必须放在你的app目录下(如
my_app/views.py、my_app/urls.py) - 若标注***的文件是放在app目录下,则位置正确;如果放在templates目录里,完全不符合Django规范,必须立即移到app目录。
3. 如何将标注***的urls.py与my_project目录下含admin和my_app路径的urls.py关联?
在项目根目录的my_project/urls.py(含admin路由的文件)中,通过include集成app的路由:
- 先导入
include模块:from django.urls import path, include - 在
urlpatterns列表中添加app路由的引用:urlpatterns = [ path('admin/', admin.site.urls), # 将my_app的urls关联进来,前缀可自定义 path('my_app/', include('my_app.urls')), ] - 此后
my_app/urls.py中定义的所有路由,都会自动带上my_app/前缀。比如在app urls中定义path('current-week/<int:pk>/', views.current_week, name='current-week'),最终访问路径为/my_app/current-week/1/。
内容的提问来源于stack exchange,提问作者mussbus
相关产品推荐
相关产品推荐

