如何基于数据库中的列数据更改URL

2024-10-03 13:31:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我试了很多次,但都没有找到确切的答案。 我想更改列表的URL,该列表是由HTML中的for循环生成的。 以下是views.py文件中该视图的代码:

class DashboardHomeViewClass(View):
    def get(self, request, *args, **kwargs):

        device_objects = device_user_data.objects.filter(User_Name = request.user.username)
        device_list = []

        for device in device_objects:
            device_list.append(device.Device_Alias_Data)

        context_logged = {'device_list': device_list}
        return render(request, "dashboardhometemplate.html", context_logged)

下面是在HTML模板中使用此上下文的代码:

{%for item in device_list%}
<li> <a  href="#" aria-expanded="false"><i class="fa fa-bar-chart"></i><span class="hide-menu">{{item}}</span></a>
{% endfor %}

现在我需要的是:根据设备别名数据,单击不同的列表视图项,就会打开不同的链接

例如:http://127.0.0.1:8000/dashboard/{{Device\u Alias\u Data}}

其中Device\u Alias\u Data是数据库中名为Device\u user\u Data的表中的字符变化字段

这是我的url.py文件:

from django.conf.urls import url
from django.contrib import admin
from dashboardhome.views import DashboardHomeViewClass
from dashboardhome.views import login_view
from django.contrib.auth.views import login
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^login/$', login  ,{'template_name': 'login_template.html'}),
    url(r'^dashboard/$', DashboardHomeViewClass.as_view()),
]

Tags: fromimporturl列表fordataobjectsrequest
2条回答

通过导入django.url.reverse,可以在model.py中使用def get \u absolute \u url()方法 并使用url名称

首先,您应该对urls.py文件进行一些调整,以使其正常工作:

app_name = "dashboardhome"

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^login/$', login  ,{'template_name': 'login_template.html'}),
    url(r'^dashboard/$', DashboardHomeViewClass.as_view(), name="dashboard"),
]

这里我们添加了url方法的app\u namename属性,这样我们就可以利用DjangoReverse Resolution of urls

之后,您可以使用template builtin^{}标记,如下所示:

{%for item in device_list%}
<li> <a  href="{% url 'dashboardhome:dashboard' item %}" aria-expanded="false"><i class="fa fa-bar-chart"></i><span class="hide-menu">{{item}}</span></a>
{% endfor %}

这会产生一个如下的网址:

http://127.0.0.1:8000/dashboard/{{item}}

请务必查看链接以获取更多信息

我希望这会有帮助

相关问题 更多 >