如何在Django中使用Slug实现类似mysite.com/user的URL路径
实现用户个人页面URL配置方案
先修正视图函数的问题
你的myfun函数有几处需要调整:
- 无需实例化
TwitterUser再调用objects,直接用TwitterUser.objects.get()即可 - 建议用
get_object_or_404替代get,避免用户不存在时抛出未处理的异常 - 加上
@login_required装饰器,确保只有登录用户能访问该页面
修改后的代码:
from django.shortcuts import get_object_or_404 from django.contrib.auth.decorators import login_required @login_required def myfun(request, user_slug): twitter_user = get_object_or_404(TwitterUser, user=user_slug) return render(request, 'authorization/home.html', {'user': twitter_user})
配置app/urls.py的URL规则
要捕获URL中的slug参数,使用Django的slug路径转换器,并且把这条新路由放在urlpatterns的最后(避免和其他固定路径冲突):
修改后的urlpatterns:
urlpatterns = [ path('', views.index, name='index'), path('twitter_login/', views.twitter_login, name='twitter_login'), path('twitter_callback/', views.twitter_callback, name='twitter_callback'), path('twitter_logout/', views.twitter_logout, name='twitter_logout'), # 新增用户个人页面路由 path('<slug:user_slug>/', views.myfun, name='user_profile'), ]
额外注意事项
- 确保
TwitterUser模型的user字段在创建用户时被正确赋值(比如用关联的auth.User的username作为slug值) - 路由放在最后是为了防止
twitter_login这类固定路径被误识别为slug参数 - 路由中的参数名
user_slug要和视图函数的参数名保持一致
内容的提问来源于stack exchange,提问作者Vicky
相关产品推荐
相关产品推荐

