Как изменить URL на основе данных столбца из базы данных - PullRequest
0 голосов
/ 04 июля 2018

Я много пробовал, но просто не могу найти точное решение. Я хочу изменить URL-адреса списка, который генерируется циклом for в HTML. Вот мой код для этого представления в файле 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 голосов
/ 04 июля 2018

может использовать метод def get_absolute_url () в model.py путем импорта django.url.reverse и используя имя URL.

0 голосов
/ 04 июля 2018

Сначала вы должны внести некоторые изменения в файл 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"),
]

Здесь мы добавили app_name и name атрибут метода url, таким образом, мы можем использовать Django Обратное разрешение URL

После этого вы можете использовать встроенный шаблон 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 %}

И это приведет к URL-адресу, подобному следующему:

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

Не забудьте проверить ссылки для получения дополнительной информации.

Надеюсь, это поможет.

...