Назначение объекта datetime в качестве параметра url

#python #python-3.x #django #django-templates

#python #python-3.x #django #django-шаблоны

Вопрос:

Я хочу присвоить URL-адресу значение типа Datetime в качестве параметра, используя фильтр даты.

Мой URL-адрес должен быть таким: /account/detail-of-cash-flow/2020-8-10

Эта команда: {{item.date_field|date:'Y-m-d'}} = ‘2020-8-10’. Но, не работает, когда я эти команды реализую для URL-адреса шаблона.

template.html

 {% for item in cash_flow_data %}

    <tr class='clickable-row' data-href="{%  url 'account:detail_of_cash_flow' item.date_field|date:'Y-m-d' %}">     
        <td>{{ item.date_field }}</td>
        <td>{{ item.EUR }}</td>
        <td>{{ item.USD }}</td>
        <td>{{ item.GBP }}</td>
        <td>{{ item.TRY }}</td>
    </tr>

{% endfor %}
  

urls.py

 app_name = "account"
urlpatterns = [
    path('daily-cash-flow/', views.daily_cash_flow, name = "daily_cash_flow"),
    path('detail-of-cash-flow/<slug:slug>/', views.detail_of_cash_flow, name = "detail_of_cash_flow")
]
  

Надеюсь, я смог объяснить свою проблему.

Ответ №1:

в вашей модели элемента добавьте метод, который вернет нужный вам формат

 class ItemModel(models.Model):
    ...
    def get_url_date(self):
        return self.date_field.strftime("%Y-%m-%d")
  

а затем в шаблоне вы можете использовать

 <a href="{%  url 'account:detail_of_cash_flow' item.get_url_date %}">link</a>
  

upd:
в зависимости от вашего контекста у вас есть несколько вариантов

  1. обновите данные контекста
 context_flow_data = [
  { 'url_date': item_data['date_field'].strftime("%Y-%m-%d"),
     'date': item_data['date_field'],
     'USD': item_data['USD'],
     'EUR': item_data['EUR'],
     'GBR': item_data['GBR'],
  } for item_data in cash_flow_data 
]
  

а затем предоставьте эти данные вашему контексту
и в использовании шаблона

 <a href="{%  url 'account:detail_of_cash_flow' item.url_date %}">link</a>
  

второй вариант:
вы можете добавить строку

 urlpatterns = [
    ...
    path('detail-of-cash-flow/', views.detail_of_cash_flow, name = "detail_of_cash_flow")
    ...
]
  

а затем в шаблоне использовать

 <a href="{%  url 'account:detail_of_cash_flow' %}{{item.date_field|date:'Y-m-d'}}/">link</a>
  

Комментарии:

1. Это предложение не сработало. Я получаю: обратный для ‘detail_of_cash_flow’ с аргументами ‘(«,)’ не найден. попробовано 1 шаблон (ы): [‘account/detail\-of\-cash\-flow/(?P<slug>[-a-zA-Z0-9_] )/$’]

2. {{ item.get_url_date }} = null

3. итак, какой URL-адрес вам нужен, если date_field равно null?

4. Ох, жаль. Теперь запомните. Мои контекстные данные: paste.ubuntu.com/p/ZDbV9dmVSG