【问题标题】:How to change URLs based on a column data from the Database如何根据数据库中的列数据更改 URL
【发布时间】:2018-07-04 14:24:29
【问题描述】:

我尝试了很多,但我无法找到确切的解决方案。 我想更改由 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()),
]

【问题讨论】:

    标签: python django django-urls


    【解决方案1】:

    首先,您应该对 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_namename属性,这样我们就可以使用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}}
    

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

    我希望这会有所帮助。

    【讨论】:

    • 我的应用程序名称是“dashboardhome”,所以我按照您所说的更改了文件,但出现错误:{%for item in device_list%} &lt;li&gt; &lt;a href="{% url dashboardhome:dashboard item %}" aria-expanded="false"&gt;&lt;i class="fa fa-bar-chart"&gt;&lt;/i&gt;&lt;span class="hide-menu"&gt;{{item}}&lt;/span&gt;&lt;/a&gt; {% endfor %} 错误为 - 无法解析其余部分:':item' from 'dashboardhome :item' @yusef-bh
    • 糟糕,我错过了一些报价,href="{% url 'dashboardhome:dashboard' item %}"。我编辑了答案。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2014-03-02
      • 1970-01-01
      • 2019-05-29
      • 2021-12-15
      • 1970-01-01
      相关资源
      最近更新 更多