如何在我的模板html django中将上下文名称传递到url调用中



这是urls.py文件

from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('blog/', views.blog, name='blog')
]

这是views.py文件

def index(request):
# Home
home = Home.objects.latest('updated')
# About
about = About.objects.latest('updated')
profiles = Profile.objects.filter(about=about)
# Skills
categories = Category.objects.all()
# Portfolio
portfolios = Portfolio.objects.all()

context = {
'home': home,
'about': about,
'profiles': profiles,
'categories': categories,
'portfolios': portfolios
}

if request.method == "POST":
form_inst = FormFill(name = request.POST['name'],
email = request.POST['email'],
text = request.POST['text'])
form_inst.save()
return redirect('/')
return render(request, 'index.html', context=context)

这是我试图将每个上下文名称传递给导航链接的html文件

<div class="nav__menu" id="nav-menu">
<ul class="nav__list">
<li class="nav__item"><a href="{% url 'blog' %}" class="nav__link active" target="_blank">Blog</a></li>
<li class="nav__item"><a href="{% url 'index' {{home}} %}" class="nav__link">Home</a></li>
<li class="nav__item"><a href="{% url 'index' {{sbout}} %}" class="nav__link">About</a></li>
<li class="nav__item"><a href="{% url 'index' {{profiles}} %}" class="nav__link">Skills</a></li>
<li class="nav__item"><a href="{% url 'index' {{categories}} %}" class="nav__link">Portfolio</a></li>
<li class="nav__item"><a href="{% url 'index' {{portfolios}} %}" class="nav__link">Contact</a></li>
</ul>
</div>

我想在html文件中的每个导航链接的URL中传递上下文字典键

您不能在url中传递对象本身,只能传递参数,如模型的主键、字符串或数字。

在您的情况下,您不需要传递任何参数,因为您的视图不需要它们。光是url就足够了。然后为每个用例编写一个视图,在每个视图中,从数据库中获取所需的对象,将它们传递到上下文中,然后渲染视图。

因此,以您的投资组合为例:

#urls.py
urlpatterns = [
....
path("/portfolios", views.portfolio_list, name="portfolio_list"),
....
]
#views.py
def portfolio_list(request):
portfolios = Portfolio.objects.all()
context = {"portfolios": portfolios}
return TemplateResponse(
request, template="portfolio_list.html", context=context
)
#home.html
....
<li class="nav__item"><a href="{% url 'portfolio_list' %}" class="nav__link">Portfolio</a></li>
#portfolio_list.html
#list all your portfolio objects here

编辑:如果你想对多个列表重复使用同一个模板,那么如果你的所有对象都相似,你可以这样做:

#urls.py
urlpatterns = [
....
path("list/<str:type>", views.list_view, name="list_view"),
....
]
#views.py
def list_view(request, type):
if type == 'portfolio':
objects = Portfolio.objects.all()
elif type == 'category':
objects = Categories.objects.all()
#
# carry on with 'elif' for the other types you want to list
# 
context = {"objects": objects}
return TemplateResponse(
request, template="list_view.html", context=context
)
#home.html
....
<li class="nav__item"><a href="{% url 'list_view' 'portfolio' %}" class="nav__link">Portfolios</a></li>
<li class="nav__item"><a href="{% url 'list_view' 'category' %}" class="nav__link">Categories</a></li>
....

最新更新