如何根据数据库中的列数据更改URL

时间:2018-07-04 14:24:29

标签: python django django-urls

我尝试了很多,但是我无法找到确切的解决方案。 我想更改由HTML中的for循环生成的列表的URL。 这是我在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 %}

现在我真正需要的是:在基于device_Alias_Data的不同列表视图项上单击时,应该打开不同的链接。

例如:http://127.0.0.1:8000/dashboard/ {{Device_Alias_Data}}

其中 Device_Alias_Data 是数据库中名为 device_user_data 的表中的字符变化字段。

这是我的urls.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()),
]

2 个答案:

答案 0 :(得分:0)

首先,您应该对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_name name 属性,这样我们就可以利用Django Reverse Resolution of urls

之后,您可以使用内置的url标记模板,如下所示:

{%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}}

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

我希望这会有所帮助。

答案 1 :(得分:0)

可以通过导入django.url.reverse在model.py中使用def get_absolute_url()方法 并使用网址名称。