artist_detail.html 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. {% extends "base_list.html" %}
  2. {% load mathfilters %}
  3. {% block title %}{{object.name}}{% endblock %}
  4. {% block lists %}
  5. <div class="row">
  6. {% if object.thumbnail %}
  7. <p style="float:left; width:300px; margin-right:10px;">
  8. <img style="border:1px solid #ccc;" src="{{artist.thumbnail.url}}" width=300 height=300 />
  9. </p>
  10. {% else %}
  11. {% if object.album_set.first.cover_image %}
  12. <p style="float:left; width:302px; padding:0; border: 1px solid #ccc">
  13. <img src="{{object.album_set.first.cover_image.url}}" width=300 height=300 />
  14. </p>
  15. {% endif %}
  16. {% endif %}
  17. <div style="float:left; width:600px; margin-left:10px; ">
  18. <p>{{artist.biography|safe|linebreaks|truncatewords:160}}</p>
  19. <hr/>
  20. <p><a href="{{artist.mb_link}}">Musicbrainz</a></p>
  21. </div>
  22. </div>
  23. <div class="row">
  24. <p>{{artist.scrobbles.count}} scrobbles</p>
  25. {% if charts %}
  26. <p>{% for chart in charts %}<em><a href="{{chart.link}}">{{chart}}</a></em>{% if forloop.last %}{% else %} | {% endif %}{% endfor %}</p>
  27. {% endif %}
  28. <div class="col-md">
  29. <h3>Top tracks</h3>
  30. <div class="table-responsive">
  31. <table class="table table-striped table-sm">
  32. <thead>
  33. <tr>
  34. <th scope="col">Rank</th>
  35. <th scope="col">Track</th>
  36. <th scope="col">Album</th>
  37. <th scope="col">Count</th>
  38. <th scope="col"></th>
  39. </tr>
  40. </thead>
  41. <tbody>
  42. {% for track in object.tracks %}
  43. <tr>
  44. <td>{{rank}}#1</td>
  45. <td><a href="{{track.get_absolute_url}}">{{track.title}}</a></td>
  46. <td><a href="{{track.album.get_absolute_url}}">{{track.album}}</a></td>
  47. <td>{{track.scrobble_count}}</td>
  48. <td>
  49. <div class="progress-bar" style="margin-right:5px;">
  50. <span class="progress-bar-fill" style="width: {{track.scrobble_count|mul:10}}%;"></span>
  51. </div>
  52. </td>
  53. </tr>
  54. {% endfor %}
  55. </tbody>
  56. </table>
  57. </div>
  58. </div>
  59. </div>
  60. <div class="row">
  61. <div class="col-md">
  62. <h3>Last scrobbles</h3>
  63. <div class="table-responsive">
  64. <table class="table table-striped table-sm">
  65. <thead>
  66. <tr>
  67. <th scope="col">Date</th>
  68. <th scope="col">Track</th>
  69. <th scope="col">Album</th>
  70. </tr>
  71. </thead>
  72. <tbody>
  73. {% for scrobble in object.scrobbles %}
  74. <tr>
  75. <td>{{scrobble.timestamp}}</td>
  76. <td><a href="{{scrobble.track.get_absolute_url}}">{{scrobble.track.title}}</a></td>
  77. <td><a href="{{scrobble.track.album.get_absolute_url}}">{{scrobble.track.album.name}}</a></td>
  78. </tr>
  79. {% endfor %}
  80. </tbody>
  81. </table>
  82. </div>
  83. </div>
  84. </div>
  85. {% endblock %}