Saya menyiapkan komentar di Wagtail menggunakan django-comments-xtd dan satu hal yang sulit saya pahami adalah mengapa tautan permanen komentar saya terus berlanjut ke https://example.com/news/bloggy-test-post/#c1 alih-alih https://localhost:8000/news/bloggy-test-post/#c1.

Saya menemukan pengguna dengan masalah serupa di grup Google Wagtail yang menemukan bahwa mereka telah menetapkan "example.com" sebagai situs mereka di admin Wagtail. Tetapi saya hanya memiliki satu situs di pengaturan saya dan saat ini diatur ke "localhost" dengan port 8000.

Tangkapan layar situs admin Wagtail menunjukkan ada satu situs yang disetel ke localhost dengan port 8000

Saya mencari semua file dan perpustakaan saya untuk "example.com" dan satu-satunya pengaturan lain yang saya temukan adalah pengaturan BASE_URL di base.py. Saya mencoba mengubahnya menjadi http://localhost:8000 dan tautan permanen komentar masih diarahkan ke "example.com".

Apakah ada pengaturan lain yang saya lewatkan? Atau cara lain saya seharusnya mendapatkan URL?

Saat ini, saya memiliki kode ini untuk mengambil url di file models.py saya:

    def get_absolute_url(self):
    return self.get_url()

Ini adalah kode bagian komentar dari template saya:

    {% get_comment_count for page as comment_count %}

      <p>
      <a href="{% pageurl page %}#comments">
        {{ comment_count }} comment{{ comment_count|pluralize }}
      </a>
      {{ comment_count|pluralize:"has,have" }} been posted.
    </p>

    {% render_xtdcomment_tree for page %}
    {% render_comment_form for page %}

Dan ini (semoga) bagian terkait dari comment_tree.html dari Django-comments-xtd:

<h6 class="mb-1 small d-flex">
    <div class="mr-auto">{{ item.comment.submit_date }}&nbsp;-&nbsp;{% if item.comment.url and not item.comment.is_removed %}<a href="{{ item.comment.url }}" target="_new">{% endif %}{{ item.comment.name }}{% if item.comment.url %}</a>{% endif %}{% if item.comment.user and item.comment.user|has_permission:"django_comments.can_moderate" %}&nbsp;<span class="badge badge-secondary">{% trans "moderator" %}</span>{% endif %}&nbsp;&nbsp;<a class="permalink" title="{% trans 'comment permalink' %}" href="{% get_comment_permalink item.comment %}">¶</a></div>
    <span>
      {% if not item.comment.is_removed %}
        {% if perms.comments.can_moderate %}
          {% if item.flagged_count %}
            <span class="badge badge-danger" title="{% blocktrans count counter=item.flagged_count %}A user has flagged this comment as inappropriate.{% plural %}{{ counter }} users have flagged this comment as inappropriate.{% endblocktrans %}">{{ item.flagged_count }}</span>
          {% endif %}
        {% endif %}
        {% if allow_flagging and item.flagged %}
          <i class="fas fa-flag text-danger" title="{% trans 'comment flagged' %}"></i>
        {% elif allow_flagging %}
          <a class="mutedlink"
             href="{% url 'comments-flag' item.comment.pk %}">
            <i class="fas fa-flag" title="{% trans 'flag comment' %}"></i>
          </a>
        {% endif %}
        {% if perms.comments.can_moderate %}
          <a class="mutedlink"
             href="{% url 'comments-delete' item.comment.pk %}"><i class="fas fa-trash-alt" title="{% trans 'remove comment' %}"></i></a>
        {% endif %}
      {% endif %}
    </span>
  </h6>
1
Meagen Voss 12 Mei 2021, 02:09

1 menjawab

Jawaban Terbaik

Django memiliki kerangka situs opsionalnya sendiri yang berbeda dari konsep Wagtail dari situs. Dalam templat proyek Wagtail standar ini dimatikan (yaitu django.contrib.sites tidak disertakan dalam INSTALLED_APPS) tetapi proyek Anda mungkin telah mengaktifkannya, khususnya jika Anda mengintegrasikan Wagtail ke dalam proyek Django yang ada. Seperti Wagtail, catatan situs Django disimpan dalam basis data, dan saya menduga di sinilah referensi example.com bersembunyi - jika Anda mengaktifkan situs admin Django (berbeda dari situs Wagtail), Anda harus menemukan Situs model yang tercantum di sana.

Menggali kode django-comments-xtd dan django-contrib-comments menunjukkan bahwa URL yang dikembalikan oleh tag {% get_comment_permalink %} akhirnya ditangani oleh tampilan django.contrib.contenttypes.views.shortcut, yang memang terdaftar sebagai menggunakan kerangka situs Django.

Adapun mengapa menambahkan situs Wagtail kedua menghindari masalah: ketika Wagtail menghasilkan URL halaman, ia akan lebih memilih untuk mengembalikan URL lokal tanpa domain (misalnya <a href="/news/bloggy-test-post/">) ketika ia dapat melakukannya dengan jelas - seperti halnya jika hanya satu Situs Wagtail ditentukan. Setelah Anda menambahkan situs kedua, ia beralih ke URL lengkap termasuk domain - dan pada saat itu, Django mengenali bahwa itu telah melewati URL lengkap dan tidak mencoba menerapkan logika situsnya sendiri untuk 'memperbaikinya'.

0
gasman 12 Mei 2021, 01:27