2014-05-20 174 views
4

我想將一些HTML模板包含到我的模型之一的django change_form.html默認模板中。 我的主要目標是在Django後端創建一些圖表。換行符在Django admin中使用HTML換行符

我一直在遇到的問題是,換行符不斷被<br />取代。 這特別麻煩,因爲它破壞了我真正感興趣的JavaScript代碼,包括在頁面上。

目前我的方法是在我的ModelAdmin類中使用readonly_fields,並在模型中使用函數返回我的模板的render_to_string

我的模型

class Link(models.Model): 
     user = models.ForeignKey(
      'auth.User', 
      verbose_name=_('Author'), 
      related_name="tinylinks", 
     ) 

     link = models.CharField(
      max_length=2500, 
      verbose_name=_('Link'), 
     ) 

     clicks = models.PositiveIntegerField(
      default=0, 
      verbose_name=_('Amount of views'), 
     ) 

     def click_statistics(self): 
      response = render_to_string(
       'admin/links/link/click_statistics.html', {}) 

的的ModelAdmin類

class LinkAdmin(admin.ModelAdmin): 
    list_display = ('link', 'user', 'clicks') 
    search_fields = ['link', 'user'] 

    readonly_fields = ('click_statistics',) 

    fieldsets = [ 
      ('Link', {'fields': ['user', 'link', 'clicks',]}), 
      ('Statistics', {'fields': ['click_statistics',]}), 
    ] 

,這將是click_statistics.html

<table border="0" cellspacing=""> 
    <tr> 
     <td valign="top"> 
      <div id='stat_line' class='stats_line line' style='display:block'> 
       <script id="graphstat_line" type="text/javascript"> 
        function graphstat_line() { 
         var data = google.visualization.arrayToDataTable([]); 

         var options = { 
          'legend': "none", 
          'pointSize': 3, 
          'theme': "maximized", 
          'curveType': "function", 
          'width': 430, 
          'height': 220, 
          'hAxis': {minTextSpacing: 80, maxTextLines: 1, maxAlternation: 1}, 
          'vAxis': {minValue: -0.5, format: '#'}, 
          'colors': ['#2a85b3'] 
         } 

         new google.visualization.LineChart(document.getElementById('visualization_stat_line')).draw(data, options);} 
         google.setOnLoadCallback(graphstat_line); 
       </script> 
       <div id="visualization_stat_line"></div> 
      </div> 
     </td> 
    </tr> 
</table> 

的問題,我已經有以下幾種:

  • 當render_to_string的輸出包含在admin change_form.html模板中時,爲什麼換行符被替換爲<br />
  • 有什麼辦法可以阻止這種行爲?
+0

「Django」不會這樣做。你的代碼是以某種方式做的。但是由於您尚未發佈任何內容,因此我們無法幫助您解決問題。 –

+0

謝謝你的迴應Daniel,我會用代碼更新我的問題。 – Claudiu

+0

我也遇到過這個問題。肯定似乎是Django的錯。當我在我的管理方法中打印值時,它看起來很好,但返回給瀏覽器的結果包含「
」。非常令人沮喪。我的hacky解決方法是自己替換所有換行符,並確保我的內聯JS代碼被正確格式化爲一行代碼。另外,不要介意羅斯曼的粗魯。他有點傲慢。 – Cerin

回答

3

您是否在使用django-suit?如果是的話,則問題是在模板suit/templates/admin/includes/fieldset.html

{# If multi-fields and wrap controls too #} 
    {% if not singlefield %} 
     <div class="multi-field-controls"> 
     {% endif %} 

    {% if field.is_readonly %} 
     <span class="readonly">{{ field|field_contents_foreign_linked|linebreaksbr }}</span> 
    {% else %} 
     {{ field.field }} 
    {% endif %} 

    {# For single field errors#} 
    {% if singlefield and line.errors %} 
     <span class="help-inline">{{ line.errors }}</span> 
    {% endif %} 

複製模板到一個應用程序是在更高或INSTALLED_APPS到(所以TEMPLATE_DIR/admin/includes/fieldset.html)中列出TEMPLATE_DIRS一個目錄,並從上面的行刪除|linebreaksbr

幾個月前我遇到過這個問題,偶然發現了這個解決方案。