Django中如何将模型数据传递到URL实现带用户名的路由配置?
操作方法
按以下三步配置即可实现带用户名的动态URL:
- 修改路由配置
打开你存放路由的urls.py文件(app下或项目根目录均可,取决于你的路由拆分方式),将profile对应的路由规则改为带动态路径参数的形式:
from django.urls import path from . import views urlpatterns = [ # 其余已有路由保持不变 path('profile/<str:username>/', views.profile, name='profile'), ]
其中<str:username>是Django的路径转换器写法,会自动匹配路径中profile/之后、末尾斜杠之前的字符串,将其作为名为username的参数传递给对应的视图函数。str是默认转换器,匹配除/外的所有非空字符串,完全满足常规用户名的匹配需求。
- 修改视图函数适配参数
原来的profile视图没有接收路径参数,需要新增username入参,同时建议直接通过用户名查询对应的用户实例,方便后续在模板中渲染用户信息:
from django.shortcuts import render, get_object_or_404 from .models import Utilisateur def profile(request, username): # 按用户名匹配用户,不存在则直接返回404,避免抛出查询异常 profile_user = get_object_or_404(Utilisateur, username=username) return render(request, 'profile.html', {'profile_user': profile_user})
注意:请给你的Utilisateur模型的username字段加上unique=True约束,即字段定义改为username = models.CharField(max_length=50, unique=True),避免重名用户导致查询错误。修改完模型后记得执行python manage.py makemigrations和python manage.py migrate同步数据库结构。
- 动态生成带用户名的URL
配置完路由和视图后,不要在代码里硬编码/profile/xxx/形式的链接,用Django的反向解析能力生成链接,后续修改路由规则时不需要批量改代码:
- 模板中使用
{% url %}标签生成:
<!-- 生成当前登录用户的个人页链接,替换为你项目中实际存储当前登录用户的变量即可 --> <a href="{% url 'profile' username=request.user.username %}">个人中心</a> <!-- 遍历用户列表生成对应用户主页链接 --> {% for user in all_users %} <a href="{% url 'profile' username=user.username %}">{{ user.username }}的主页</a> {% endfor %}
- 视图中重定向时使用
reverse方法生成路径:
from django.shortcuts import redirect from django.urls import reverse def some_view(request): # 你的业务逻辑,拿到目标用户对象target_user target_user = Utilisateur.objects.get(id=1) # 跳转到对应用户的个人页 return redirect(reverse('profile', kwargs={'username': target_user.username}))
配置完成后,访问形如http://127.0.0.1:8000/profile/username1/的地址就能正常匹配到视图,拿到对应的用户名参数。
内容的提问来源于stack exchange,提问作者user19069531
相关产品推荐
相关产品推荐

